IO流 文件夹的拷贝(字节流)

时间:2022-02-24 23:09:05

 

文件夹拷贝

IO流 文件夹的拷贝(字节流)

IO流 文件夹的拷贝(字节流)

 

copy文件夹(CopyDir.java)

package cn.Reader;

import java.io.File;
import java.io.IOException;

/*
 * 文件夹的拷贝
 * 1.文件复制  Copyfile
 * 2.文件夹创建 mkdirs()
 * 3.递归查找子孙级
 */
public class CopyDir {
    public static void main(String [] args) {
        String srcPath="C:/Users/Administrator/Desktop/sun/JAVA  project";
        //目标目录
        String destPath="C:/Users/Administrator/Desktop/sun/haha";
        CopyDir(srcPath,destPath);
        
    }
    /*
     * 拷贝文件夹
     * src 源路径
     * dest 目标路径
     */
    public static void CopyDir(String srcPath,String destPath) {
        File src=new File(srcPath);
        File dest=new File(destPath);
        CopyDir(src,dest);
        
    }
    
    
    
    
    //拷贝文件夹细节
    public static void CopyDir(File src,File dest) {
        if(src.isFile()) {  //文件
            try {
                FileUtil.CopyFiles(src, dest);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        else if(src.isDirectory()) {  //文件夹
            //确保目标文件夹存在
             dest.mkdirs();
             //获取下一级的目录或者文件
             for(File sub:src.listFiles()) {                              //递归遍历子孙级
                 CopyDir(sub,new File(dest,sub.getName()));
             }
        }
    }

}

 

文件夹及文件拷贝封装(FileUtil.java)

package cn.Reader;
/*
 * 文件操作
 * 1.文件拷贝
 * 2.文件夹拷贝
 */
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileUtil {
    /*
     * 拷贝文件夹
     * src 源路径
     * dest 目标路径
     */
    public static void CopyDir(String srcPath,String destPath) {
        File src=new File(srcPath);
        File dest=new File(destPath);
        CopyDir(src,dest);
        
    }
    
    
    
    
    //拷贝文件夹细节
    public static void CopyDir(File src,File dest) {
        if(src.isFile()) {  //文件
            try {
                FileUtil.CopyFiles(src, dest);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        else if(src.isDirectory()) {  //文件夹
            //确保目标文件夹存在
             dest.mkdirs();
             //获取下一级的目录或者文件
             for(File sub:src.listFiles()) {                              //递归遍历子孙级
                 CopyDir(sub,new File(dest,sub.getName()));
             }
        }
    }
    public static void CopyFiles(String srcPath,String destPath ) throws IOException {
        CopyFiles(new File(srcPath),new File(srcPath));
    }
     
    //对该方法进行重载
    
    public static void CopyFiles(File  src,File dest ) throws IOException {
        if(!src.isFile()) {   //不是文件或者为null
            System.out.println("只能拷贝文件");
            throw new IOException("只能拷贝文件");
        }

        
        //2.选择流
        InputStream  is =new FileInputStream(src);
        OutputStream os=new FileOutputStream(dest);
        //3.文件拷贝 循环 读取+写出
        byte[] flush=new byte[1024];
        int len=0; 
        //读取
        while(-1!=(len=is.read(flush))){
            //写出
            os.write(flush, 0, len); 
        }
        os.flush();  //强制刷出
        //关闭两个流 
        os.close();  //后打开的先关闭
        is.close();
        
    }
    public static void main(String[] args) {
        File src=new File("C:/Users/Administrator/Pictures/Saved Pictures/a.jpg");
        File dest =new File("C:/Users/Administrator/Pictures/Saved Pictures/180.jpg");
        try {
            CopyFiles(src,dest);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}