• java学习笔记之IO编程—目录和文件的拷贝


         进行文件或目录的拷贝时,要先判断处理对象是文件还是目录,如果是文件则直接拷贝,如果是目录还需要拷贝它的子目录及其文件,这就需要递归处理了

    import java.io.*;
    
    class FileUtil{
        private File srcFile;
        private File desFile;
        public FileUtil(String src, String des) {
            this(new File(src),new File(des));
        }
        public FileUtil(File srcFile, File desFile) {
            this.srcFile = srcFile;
            this.desFile = desFile;
        }
        public boolean copy() throws Exception {
            if(!srcFile.exists()) {
                System.out.println("源文件不存在,文件拷贝失败");
                return false;
            }
            return this.copyFileImpl(srcFile, desFile);//进行文件拷贝
        }
        public boolean copyDir() throws Exception {
            this.copyImpl(this.srcFile);//对目录用递归处理
            return true;
        }
        public void copyImpl(File file) throws Exception {//递归
            if(file.isDirectory()) {//处理对象是目录,进行递归处理
                File[] results = file.listFiles();
                if(results != null) {
                    for(int i=0;i<results.length;i++) {
                        copyImpl(results[i]);
                    }
                }
            }else {//处理对象是文件,进行拷贝处理
                String newFilePath = file.getPath().replace(this.srcFile.getPath()+File.separator, "");
                File newFile = new File(this.desFile,newFilePath);//拷贝的目标路径
                this.copyFileImpl(file, newFile);
            }
        }
        public boolean copyFileImpl(File srcFile,File desFile) throws Exception {
            if(!desFile.getParentFile().exists()) {
                desFile.getParentFile().mkdirs();//创建父目录
            }
            InputStream input = null;
            OutputStream output = null;
            try {
                input = new FileInputStream(srcFile);
                output = new FileOutputStream(desFile);
                byte[] data = new byte[1024];
                int len = 0;
                while((len = input.read(data)) != -1) {
                    output.write(data,0,len);
                }
                return true;
            }catch(Exception e) {
                throw e;
            }finally {
                if(input != null)
                    input.close();
                if(output != null)
                    output.close();
            }
        }
    }
    public class FileCopyDemo {
    
        public static void main(String[] args) throws Exception {
            // TODO Auto-generated method stub
            String src = "D:"+File.separator+"NBA";//源路径
            String des = "D:"+File.separator+"NBA2";//目标路径
            FileUtil fu = new FileUtil(src,des);
            if(new File(src).isFile()) {
                System.out.println("文件拷贝:"+fu.copy());//处理对象是文件,调用copy()方法
            }else {
                System.out.println("目录拷贝:"+fu.copyDir());//处理对象是目录,调用copyDir()方法
            }
        }
    
    }
  • 相关阅读:
    [XPath] XPath 与 lxml (五)XPath 实例
    [XPath] XPath 与 lxml (四)XPath 运算符
    [XPath] XPath 与 lxml (三)XPath 坐标轴
    [XPath] XPath 与 lxml (二)XPath 语法
    拥抱.NET Core系列:MemoryCache 缓存过期
    拥抱.NET Core系列:MemoryCache 初识
    一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go
    Configuration Extensions
    拥抱.NET Core系列:Logging (1)
    拥抱.NET Core系列:依赖注入(2)
  • 原文地址:https://www.cnblogs.com/wulianjie/p/12210260.html
Copyright © 2020-2023  润新知