遞歸實現文件夾copy

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
 * 遞歸實現文件夾copy
 */
public class Test3 {
	public static void main(String[] args){
		File file = new File("F:\\1");
		File file2 = new File("F:\\2");
		if (file.getAbsolutePath().equals(file2.getAbsolutePath())) {
			System.out.println("不可copy(原因:可能是同一個文件或文件夾)");
			return;
		}
		// 源目錄不存在
		if (!file.exists()) {
			System.out.println("源目錄或源文件不存在");
			return;
		}
		// file是文件,直接copy
		if (file.isFile()) {
			// file爲文件則直接copy文件,copy完成後終止程序
			System.out.println("正在copy文件,請稍後");
			copyFile(file, file2);
			System.out.println("文件copy完成");
			return;
		}
		// file是文件夾
		if (file.isDirectory()) {
			System.out.println("正在copy文件夾,請稍後");
			copyAllFiles(file,file2);
			System.out.println("文件夾copy完成");
		}else {
			System.out.println("抱歉,文件夾copy失敗");
		}
	}
	public static void copyAllFiles(File file,File file2) {
		File[] listFiles = file.listFiles();
		if (listFiles!=null) {
			for (File f : listFiles) {
				File temp = new File(file2.getAbsoluteFile(),f.getName());
				if (f.isDirectory()) {
					temp.mkdirs();
					copyAllFiles(f,temp);
				}else {
					copyFile(f, temp);
				}
			}
		}
	}
	public static void copyFile(File f1,File f2){
		FileInputStream fileInputStream = null;
		FileOutputStream fileOutputStream = null;
		try {
			fileInputStream = new FileInputStream(f1);
			fileOutputStream = new FileOutputStream(f2);
			int length = 0;
			byte[] bytes = new byte[1024];
			while ((length=fileInputStream.read(bytes))!=-1) {
				fileOutputStream.write(bytes,0,length);
				//System.out.println("寫入完畢");
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if (fileInputStream!=null) {
					fileInputStream.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				if (fileOutputStream!=null) {
					fileOutputStream.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章