Java 多檔案夾合并__Java

來源:互聯網
上載者:User

之前已經完成了單個檔案夾的拷貝功能,在此基礎上很容易實現多個檔案夾的合并了,套一個for迴圈就可以啦。


package com.xx.test.copy;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 TestCombineDirectory {/** * @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();}}}}


有寫的不對的地方或者考慮不完全的情況,還請大家多多指教。另外,如果想效率更高一點,可以考慮使用NIO來完成 單個檔案的拷貝。




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.