java 将文件夹所有的文件合并到指定的文件夹下
程序员文章站
2022-06-17 09:30:07
...
场景:将文件夹所有的文件合并到指定的文件夹下
另外:如果想效率更高一点,可以考虑使用NIO来完成 单个文件的拷贝。
代码如下:
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class CombineDirectory { /** * @param args */ public static void main(String[] args) { String[] sourceDirNames = {"D:/LuceneEx","D:/LuceneEx2"}; String targetDirName = "D:/LuceneEx_backup"; combineDirectory(sourceDirNames,targetDirName); } /** * 合并多个文件夹到一个文件夹中 * @param sourceDirNames * @param targetDirName */ private static void combineDirectory(String[] sourceDirNames,String targetDirName) { if(sourceDirNames==null || sourceDirNames.length==0){ throw new RuntimeException("待合并的文件夹不存在..."); } for(int i=0;i<sourceDirNames.length;i++){ copyDir(sourceDirNames[i], targetDirName); } System.out.println("合并所有的文件夹完成..."); } /** * 拷贝目录,递归的方法 * @param sourceDirName * @param targetDirName */ public static void copyDir(String sourceDirName, String targetDirName) { File sourceDir = new File(sourceDirName); File targetDir = new File(targetDirName); if(sourceDir==null || !sourceDir.exists()){ throw new RuntimeException("待拷贝的文件夹不存在..."+sourceDir.getAbsolutePath()); } if(!sourceDir.isDirectory()){ throw new RuntimeException("待拷贝的文件不是目录..."+sourceDir.getAbsolutePath()); } if(!targetDir.exists()){ targetDir.mkdirs(); } File[] files = sourceDir.listFiles(); for(int i=0;files!=null && i<files.length;i++){ if(files[i].isFile()){ //复制文件 copyFile(files[i],new File(targetDirName+File.separator+files[i].getName())); }else if(files[i].isDirectory()){ //复制目录,递归的方法 // 复制目录 String dir1 = sourceDirName+File.separator+files[i].getName(); String dir2 = targetDirName+File.separator+files[i].getName(); copyDir(dir1, dir2); } } System.out.println("拷贝文件夹成功..."+sourceDir.getAbsolutePath()); } /** * 拷贝单个的文件 * @param sourceFile 源文件 * @param targetFile 目标文件 */ private static void copyFile(File sourceFile, File targetFile) { FileInputStream in = null; BufferedInputStream bis = null; FileOutputStream out = null; BufferedOutputStream bos = null; try { // 新建文件输入流并对它进行缓冲 in = new FileInputStream(sourceFile); bis = new BufferedInputStream(in); // 新建文件输出流并对它进行缓冲 out = new FileOutputStream(targetFile); bos = new BufferedOutputStream(out); // 缓冲数组 byte[] b = new byte[1024 * 5]; int len; while ((len =bis.read(b)) != -1) { bos.write(b, 0, len); } // 刷新此缓冲的输出流 bos.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(bos!=null) bos.close(); } catch (IOException e) { e.printStackTrace(); } try { if(bis!=null) bis.close(); } catch (IOException e) { e.printStackTrace(); } } } }
- 转自:
https://blog.csdn.net/top_code/article/details/8896546
=
上一篇: 多线程-线程池的四种创建方式