前言
本文是有关于Java IO流的文件拷贝,求职笔试时碰到了一个题目,因此想把它写下来。
需求
题目:将C:\Users下所有的.java文件复制到D:\work下
实现思路
这个题目很明显是一个多文件的拷贝,我没有太好的思路,因此我使用了就简单的方法。
先实现一个单文件拷贝的方法
再实现一个遍历过滤获取所需文件路径的方法
最后循环执行
代码实现
-
单文件拷贝方法 & 遍历过滤文件路径方法
package top.panzhengquan.java.io.copy; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; /** * <p>Title:CopyFiles.java</p> * <p>Description:文件拷贝</p> * @author PZQ * @date 2020-11-7 */ public class CopyFiles { /** * @methodName:copyFile * @Description:单文件拷贝 * @param souFilePath 源文件路径 * @param desFilePath 目标文件路径 */ public void copyFile(String souFilePath, String desFilePath) { File souFile = new File(souFilePath); File desFile = new File(desFilePath); /*判断源文件是否存在,不存在则报错*/ if(!souFile.exists()) { throw new RuntimeException("源文件不存在"); } /*判断目标文件是否存在,不存在则创建*/ if(!desFile.exists()) { try { desFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } try(InputStream is = new FileInputStream(souFile); OutputStream os = new FileOutputStream(desFile)) { int len = 0; byte[] b = new byte[1024]; while((len = is.read(b)) != -1) { os.write(b, 0, len); } } catch (IOException e) { e.printStackTrace(); } } /** * @methodName:findFilesPath * @Description:遍历过滤相应后缀结尾的文件路径 * @param souFolderPath 源文件夹路径 * @param desFolderPath 目标文件夹零 * @param end 后缀名 * @return 过滤后的文件路径集合 */ public List<String[]> findFilesPath(String souFolderPath, String desFolderPath, String end) { File souFile = new File(souFolderPath); File desFile = new File(desFolderPath); /*判断源目录是否存在,不存在则报错*/ if(!souFile.exists()) { throw new RuntimeException("源文件目录不存在"); } /*判断目标目录是否存在,不存在则创建*/ if(!desFile.exists()) { desFile.mkdir(); } String[] souFileArray = souFile.list(); List<String[]> soufilderedFile = new ArrayList<>(); for(String str : souFileArray) { System.out.println(str); if(str.endsWith(end)) { String[] temp = new String[2]; temp[0] = souFolderPath + "/" + end; temp[1] = desFolderPath + "/" + end; } } return soufilderedFile; } }
-
主方法
package top.panzhengquan.java; import java.util.List; import top.panzhengquan.java.io.copy.CopyFiles; public class Main { public static void main(String[] args) { CopyFiles copyFiles = new CopyFiles(); List<String[]> filesPath = copyFiles.findFilesPath("D:/work/Briup/workspace/testResource", "D:/work/Briup/workspace/testResource2", ".txt"); for (String[] strings : filesPath) { copyFiles.copyFile(strings[0], strings[1]); } } }
总结
虽然我觉得这种实现方式很漏,但目前也只有这种思路,欢迎有更好想法的同学留言,谢谢。