Java 高级编程-文件拷贝

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/slh2016/article/details/80848316

1. 文件拷贝

package IOKnowledge;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
 * 文件拷贝处理
 * @author sunlh
 *
 */
public class Test {
    public static void main(String[] args) throws Exception {
     if(args.length != 2) {// 程序执行出错
           System.out.println("命令执行错误,执行结构:java Test 拷贝源文件路径 拷贝目标文件");
           System.exit(1);
     }
     long start = System.currentTimeMillis();
     FileUtil fu = new FileUtil(args[0], args[1]);
     System.out.println(fu.copy()?"文件拷贝成功":"文件拷贝失败");
     long end = System.currentTimeMillis();
     System.out.println("拷贝完成的时间:" + (end - start));
    }
}
/**
 * 文件操作工具类
 * @author sunlh
 *
 */
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 (!this.srcFile.exists()) {// 源文件必须存在
                System.out.println("拷贝的源文件不存在");
                return false;// 拷贝失败
           }
           if (!this.desFile.getParentFile().exists()) {// 创建父目录
                this.desFile.getParentFile().mkdirs();
           }
           byte [] data = new byte[1024];// 开辟一个拷贝的缓冲区
           InputStream input = null;
           OutputStream output = null;
           try {
                input = new FileInputStream(this.srcFile);
                output = new FileOutputStream(this.desFile);
                int len = 0;
                // 1.读取数据到数组之中,随后返回读取个数
                // 2.判断个数是否是-1,如果不是则进行写入
                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();
                }
           }
     }    
}

2. 文件夹拷贝

package IOKnowledge;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
 * 文件拷贝处理
 * @author sunlh
 *
 */
public class Test {
    public static void main(String[] args) throws Exception {
     if(args.length != 2) {// 程序执行出错
           System.out.println("命令执行错误,执行结构:java Test 拷贝源文件路径 拷贝目标文件");
           System.exit(1);
     }
     long start = System.currentTimeMillis();
     FileUtil fu = new FileUtil(args[0], args[1]);
     if(new File(args[0]).isFile()) {// 文件拷贝
           System.out.println(fu.copy()?"文件拷贝成功":"文件拷贝失败");            
     } else {// 目录拷贝
           System.out.println(fu.copyDir()?"文件拷贝成功":"文件拷贝失败");   
     }
     long end = System.currentTimeMillis();
     System.out.println("拷贝完成的时间:" + (end - start));
    }
}
/**
 * 文件操作工具类
 * @author sunlh
 *
 */
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 copyDir() throws Exception {
           try {
                this.copyImpl(this.srcFile);
                return true;               
           } catch (Exception e) {
                return false;
           }
     }

     private 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); //拷贝的目标路径
                copyFileImpl(file, newFile);
           }
     }

     private boolean copyFileImpl(File srcFile, File desFile) throws Exception{
           if (!desFile.getParentFile().exists()) {// 创建父目录
                desFile.getParentFile().mkdirs();
           }

           byte [] data = new byte[1024];// 开辟一个拷贝的缓冲区
           InputStream input = null;
           OutputStream output = null;
           try {
                input = new FileInputStream(srcFile);
                output = new FileOutputStream(desFile);
                int len = 0;
                // 1.读取数据到数组之中,随后返回读取个数
                // 2.判断个数是否是-1,如果不是则进行写入
                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 boolean copy() throws Exception {// 文件拷贝处理
           if (!this.srcFile.exists()) {// 源文件必须存在
                System.out.println("拷贝的源文件不存在");
                return false;// 拷贝失败
           }
           return this.copyFileImpl(this.srcFile, this.desFile);
     }    
}

猜你喜欢

转载自blog.csdn.net/slh2016/article/details/80848316