zoukankan      html  css  js  c++  java
  • 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");
    	}
    });
    
  • 相关阅读:
    CTFHub_技能树_文件上传
    QT入门-重载的信号槽
    QT入门-自定义信号
    C++: xx does not name a type报错
    HDU1166 敌兵布阵
    洛谷P2574 XOR的艺术(线段树)
    P3373 【模板】线段树 2(板子好题)
    SP1716 GSS3
    QT入门-自定义槽函数
    Educational Codeforces Round 87 (Rated for Div. 2) D. Multiset(树状数组/好题)
  • 原文地址:https://www.cnblogs.com/tfper/p/9855228.html
Copyright © 2011-2022 走看看