File类应用-文件夹拷贝

1 使用到知识点:

     文件夹创建

     文件字节流拷贝

     递归

2 代码

package com.bjsxt.io.file;

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

public class MyDirCopy {

	/**
	 * 
	 */
	public static void main(String[] args) {

		String srcPath = "D:/father/son1"; // 将 son1和son1下的所有内容拷贝到 son2/下
		String destPath = "D:/father/son2";
		
		if(srcPath.contains(destPath)){
			System.out.println("孩子不能将父亲拷贝到其体内去");
			return;
		}
		
		File srcFile = new File(srcPath);
		File destFile = new File(destPath);
		
		// 递归加拷贝
		
		if(srcFile.isDirectory()) {
			// 构建拷贝后的目标文件夹位置
			destFile = new File(destFile, srcFile.getName());
			//System.out.println(destFile.getName() + " : " + destFile.getAbsolutePath() ); // son1 D:\father\son2\son1
		}
		
		try {
			copyDetails(srcFile,destFile);
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

	private static void copyDetails(File srcFile, File destFile) throws IOException {
		
		if(srcFile.isFile()){
			copyFile(srcFile,destFile);
		}else if(srcFile.isDirectory()){
			destFile.mkdirs();
			File[] files = srcFile.listFiles();
			for(File sub : files){
				copyDetails(sub,new File(destFile,sub.getName()));
			}
		}
	}

	// 文件之间拷贝
	private static void copyFile(File srcFile, File destFile) throws IOException {

		if(destFile.isDirectory()){
			System.out.println(destFile.getAbsolutePath()+"不能建立于文件夹同名的文件");
			throw new IOException(destFile.getAbsolutePath()+"不能建立于文件夹同名的文件");
		}
		
		int len = 0;
		byte[] buf = new byte[1024];
		
		InputStream fis = new FileInputStream(srcFile);
		OutputStream fos = new FileOutputStream(destFile);
		
		while(-1 != (len=fis.read(buf))){
			fos.write(buf, 0, len);
		}
		
		fos.flush();
		fos.close();
		fis.close();
	}

}

3 图:



 

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2181730