Java 高级编程-文件拷贝

xiaoxiao2021-02-28  89

1. 文件拷贝2. 文件夹拷贝

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); } }
转载请注明原文地址: https://www.6miu.com/read-1950371.html

最新回复(0)