IO流-文件夹的拷贝

 

文件夹的拷贝操作

要求:

完成文件夹的拷贝,包括子目录的拷贝和所有文件的拷贝

分析:

  • 首先,得在目标目录下创建一个与源文件夹名称相同的文件夹
  • 遍历源文件夹中的所有文件对象,判断子文件是目录还是文件
  • 如果是目录,递归调用第一步的操作
  • 如果是文件,用缓冲流文件字节流完成对文件的复制
    • 创建源和目标File f = new File("路径");
    • 创建输入流和输出流对象,肯定得传上面的源和目标
    • 输入输出操作,输入操作得定义一个缓冲数组和定义一个返回读取长度的len
    • 关闭流
  • 完成

代码:

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class CopyAllFile {     public static void main(String[] args) throws Exception {         //1.创建源和目标         File srcDir = new File("D:/资料/test");          File destDir = new File("D:/资料/test_copy");         if(!destDir.exists()){             destDir.mkdirs();         }         copy(srcDir,destDir);     }     public static void copy(File src,File dest) throws Exception{             if(src.isDirectory()){                 //是目录,就在目标文件夹中创建与源文件夹相同名称的文件夹                 File destDir = new File(dest,src.getName());                 destDir.mkdir();                 //列举出所有的文件对象                 File[] fs = src.listFiles();                 //遍历所有的文件对象                 for (File file : fs) {                     copy(file,destDir);                 }             }else{                 File file1 =new File(dest,src.getName());                 copyFile(src,file1);             }     }     public static void copyFile(File inputFile,File outputFile) throws Exception{         BufferedInputStream in = new BufferedInputStream(new FileInputStream(inputFile));         BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outputFile));         byte[] buffer = new byte[1024];         int len = -1;         while((len = in.read(buffer)) != -1){             out.write(buffer, 0, len);         }         in.close();         out.close();     } }

当然,也可以有这样的需求,比如,我只想复制.avi的视频文件,那么这时候就得有一个筛选器,java给我我们提供了:

File[] fs = dir.listFiles(FilenameFilter的实例) 必须覆盖类中的accept方法   boolean accept(File dir,String name){}
File[] fs = srcDir.listFiles(new FilenameFilter(){     @Override     public boolean accept(File dir, String name){         return new File(dir,name).isFile() && name.endsWith(".java");     } });
 
 
标签:  
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信