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");
    }
});

关键词:file 文档 new io 拷贝 java destdir src 创建 public

相关推荐:

IO流常规操作

ES6 Build Pipeline for Middleman using Gulp

Intellij Idea 13 UI Design and automatic construction of Gradle

IO复制多级目录 控制台输入文档目录然后把目录下java文档复制到 D: 并统计java个数

java基础IO流 复制键盘录入的目录,复制其中的.java文档到指定目录,指定目录中有重名,则改名 对加密文档计算字母个数

apache.commons.io.FileUtils的常用操作

FileFilter文档过滤器

Java IO流学习总结七:Commons IO 2.5-FileUtils

Code

java 打印流 递归复制子文档子文档夹 不同编码文档复制到同一文档中 串行化流反串行化流