Java目录拷贝

package com.blb.text7;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Iterator;

public class Demo11 {
    
    
	public static void main(String[] args) throws Exception {
    
    
		// 拷贝源
		File srcFile = new File("D:\\ShellExt");
		// 拷贝目标
		File destFile = new File("E:\\");
		// 调用方法拷贝
		copyDir(srcFile,destFile);
	}
	/*
	 * 拷贝目录
	 * srcFile 拷贝源
	 * destFile 拷贝目标
	 */
	private static void copyDir(File srcFile, File destFile) throws Exception {
    
    
		if (srcFile.isFile()) {
    
    
			// srcFile如果是一个文件的话,递归结束
			// 是文件的时候需要拷贝
			// ...一边读一边写
			// 读这个文件
			FileInputStream fis = new FileInputStream(srcFile);
			// 写到这个文件中
			String path = (destFile.getAbsolutePath().endsWith("\\") ? destFile.getAbsolutePath() : destFile.getAbsoluteFile()+"\\") + srcFile.getAbsolutePath().substring(3);;
			FileOutputStream fos = new FileOutputStream(path);
			// 一边读一边写
			byte[] b = new byte[1024 * 1024];
			int readCount=0;
			while ((readCount = fis.read(b))!=-1) {
    
    
				fos.write(b,0,readCount);
			}
			fos.close();
			fis.close();
			return;
		}
		// 获取源下面的子目录
		File[] files = srcFile.listFiles();
//		System.out.println(files.length);// 广度搜索
		for (File file : files) {
    
    
			// 获取所有文件的(包括目录和文件)绝对路径
//			System.out.println(file.getAbsolutePath());
			if (file.isDirectory()) {
    
    
				// 新建对应的目录
//				System.out.println(file.getAbsolutePath());
				// D:\ShellExt\installer 源目录
				// C:\ShellExt\installer 目标目录
				String srcDir = file.getAbsolutePath();
				String destDir = (destFile.getAbsolutePath().endsWith("\\") ? destFile.getAbsolutePath() : destFile.getAbsoluteFile()+"\\") + srcDir.substring(3);
//				System.out.println(destDir);
				File newFile = new File(destDir);
				if(!newFile.exists()) {
    
    
					newFile.mkdirs();
				}
			}
			// 递归调用
			copyDir(file, destFile);
		}
	}
}

猜你喜欢

转载自blog.csdn.net/xuexiwd/article/details/117608182