資料夾的複製--遞迴演算法

天堂2013發表於2016-12-28

在Java中,要想實現資料夾的複製,採用的是IO技術。通常對我們來說,要想實現一個檔案的複製,是十分簡單的。那資料夾的復呢?我們只需要從中間價格遞迴演算法即可。


要求是:將test資料夾的所有內容都複製到test1資料夾下,且要求test資料夾中的結構不變,如/test/a/b.doc檔案在test1檔案下的目錄應該是/test1/test/a/b.doc.

具體的程式碼實現如下

package com.tiantang.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


public class TestFileStream {

	public static void main(String[] args) {
		String srcPath="F:\\test";
		File src=new File(srcPath);
		String destPath="F:\\test1";
		File dest=new File(destPath);
		copyDir(src, dest);
	}
	
	public static void copyDir(File src, File dest) {
		if(src.isDirectory()){
			File temp=new File(dest,src.getName());
			temp.mkdirs();
			for (File file : src.listFiles()) {
				copyDir(file, temp);
			}
		}else{
			copyFile(src, new File(dest,src.getName()));
		}
	}

	/**
	 * 拷貝檔案
	 * 
	 * @param src
	 * @param dest
	 */
	public static void copyFile(File src, File dest) {
		InputStream in = null;
		OutputStream out = null;
		try {
			in = new FileInputStream(src);
			out = new FileOutputStream(dest);
			byte[] b = new byte[1024];
			int len = 0;
			while (-1 != (len = in.read(b))) {
				out.write(b, 0, len);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}


}
要想實現資料夾的複製,就得用到遞迴,剩下的就是檔案的複製了。思路:當要複製資料夾時,我們用listFiles()方法得到資料夾的所有File,然後在遍歷所有的File物件,再判斷他們是資料夾還是檔案....。

相關文章