zoukankan      html  css  js  c++  java
  • 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()方法
            }
        }
    
    }
  • 相关阅读:
    Objective-C Loops
    HDU 4757 Tree(可持久化Trie+Tarjan离线LCA)
    Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset(可持久化Trie)
    HDU 5416 CRB and Tree(前缀思想+DFS)
    HDU 3695 Computer Virus on Planet Pandora(AC自动机模版题)
    HDU 2222 Keywords Search(AC自动机模版题)
    POJ 2697 A Board Game(Trie判重+BFS)
    HDU 4287 Intelligent IME(字典树数组版)
    HDU 1160 FatMouse's Speed(要记录路径的二维LIS)
    HDU 1565&1569 方格取数系列(状压DP或者最大流)
  • 原文地址:https://www.cnblogs.com/wulianjie/p/12210260.html
Copyright © 2011-2022 走看看