A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戏言丶 高级黑马   /  2014-10-25 23:35  /  1623 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

写了一个文件的复制,包括多级文件夹以及单个文件的复制,可以手工输入。
  1. import java.io.*;
  2. import java.util.*;

  3. /**
  4. * 问题:复制多级文件目录或者文件到另一个盘符中
  5. * 思路:
  6. * 1、将要复制的文件夹或者文件与文件API相关联
  7. * 2、创建一个存储要复制的文件的集合
  8. * 3、如果是复制多级目录则创建目的文件夹,如果只复制一个文件则不需要
  9. * 4、若复制的为目录则遍历文件夹中的文件,若遍历到文件夹则创建该文件夹,而如果是文件则将其路径和名称添加到集合中
  10. * 5、创建读取流与集合中的文件路径及名称相关联
  11. * 6、创建写入流与目的路径以及集合中的文件名称相关联
  12. * 7、读取需要复制的文件内容
  13. * 8、写入到目的路径中的文件中
  14. * 9、关闭流
  15. *
  16. */
  17. public class CopyMulFile {
  18.         public static void main(String[] args){
  19.                 //手动输入要复制的文件目录或者文件名
  20.                 Scanner s = new Scanner(System.in);
  21.                 System.out.println("请输入要复制的文件目录或者文件名(格式如:e:\\\\hm 或者e:\\\\hm\\\\a.txt):");
  22.                 String dirName = s.next();
  23.                
  24.                 //将要复制的文件夹或者文件与文件API相关联
  25.                 File sourDir = new File(dirName);
  26.                 if(!sourDir.exists()){
  27.                         System.out.println(sourDir+"文件不存在!");
  28.                         return;
  29.                 }
  30.                
  31.                 //手动输入文件复制的目的目录
  32.                 System.out.println("请输入复制到的目的目录(格式如:i:\\\\hm\\\\):");
  33.                 String desName = s.next();
  34.                
  35.                 //若要复制的是一个目录文件夹,则创建目的文件夹
  36.                 File desDir = new File(desName+sourDir.getName());;
  37.                 if(sourDir.isDirectory()){
  38.                         desDir.mkdir();
  39.                         if(!desDir.exists()){
  40.                                 System.out.println(desDir+"文件不存在!");
  41.                                 return;
  42.                         }
  43.                 }
  44.                
  45.                 //创建一个存储要复制文件的集合
  46.                 List<File> list = new ArrayList<File>();
  47.                
  48.                 //调用函数进行文件的复制
  49.                 addFile(list,sourDir,sourDir,desDir);
  50.                 copyFile(list,sourDir,desDir);
  51.                
  52.         }
  53.        
  54.         public static void addFile(List<File> list,File file,File sourDir,File desDir){
  55.                 if(sourDir.isDirectory()){
  56.                         File[] files = sourDir.listFiles();
  57.                         File dir = null;//目的文件夹
  58.                        
  59.                         //遍历文件夹中的文件
  60.                         for(int i=0;i<files.length;i++){
  61.                                 //如果该文件是文件夹则在目的盘符中创建相应的文件夹,并递归遍历该文件夹中的内容。
  62.                                 if(files[i].isDirectory()){
  63.                                         String desName = files[i].toString().replace(file.toString(), desDir.toString());
  64.                                         dir = new File(desName);
  65.                                         dir.mkdir();
  66.                                        
  67.                                         addFile(list,file,files[i],desDir);//递归复制
  68.                                 }
  69.                                 //如果该文件不是文件夹则添加到复制列表中
  70.                                 else
  71.                                         list.add(files[i]);
  72.                         }
  73.                 }
  74.                 else
  75.                         list.add(file);
  76.         }
  77.        
  78.         public static void copyFile(List<File> list,File sourDir,File desDir){
  79.                 //创建读取流与写入流
  80.                 BufferedInputStream bufis = null;
  81.                 BufferedOutputStream bufos = null;
  82.                
  83.                 int count = 0;
  84.                 try{
  85.                         for(int i=0;i<list.size();i++){
  86.                                 //读取流与要复制的文件相关联
  87.                                 bufis = new BufferedInputStream(new FileInputStream(list.get(i)));
  88.                                
  89.                                 //写入流与目的文件相关联
  90.                                 String desName = list.get(i).toString().replace(sourDir.toString(), desDir.toString());
  91.                                 bufos = new BufferedOutputStream(new FileOutputStream(desName));
  92.                                
  93.                                 byte[] buf = new byte[1024];//创建临时存储缓冲区
  94.                                 int len = 0;//读取长度标记
  95.                                
  96.                                 //复制文件操作
  97.                                 while((len=bufis.read(buf))!=-1){
  98.                                         bufos.write(buf,0,len);
  99.                                         bufos.flush();
  100.                                 }
  101.                                 count++;
  102.                                 System.out.println(list.get(i)+"复制成功!");
  103.                         }
  104.                         System.out.println("复制成功"+count+"个文件");
  105.                 }catch(IOException e){
  106.                         throw new RuntimeException("复制操作失败!");
  107.                 }finally{
  108.                         try{
  109.                                 if(bufos!=null)
  110.                                         bufos.close();
  111.                         }catch(IOException e){
  112.                                 throw new RuntimeException("关闭输出流失败!");
  113.                         }
  114.                         try{
  115.                                 if(bufis!=null)
  116.                                         bufis.close();
  117.                         }catch(IOException e){
  118.                                 throw new RuntimeException("关闭输入流失败!");
  119.                         }
  120.                 }
  121.         }
  122. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马