欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

File类的综合运用,拷贝文件夹和文件夹中的文件

程序员文章站 2022-06-16 21:33:26
...
package com.neuedu.chapter03;

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

/**
 * 拷贝目录(包括目录中子目录和文件)
 * @author Administrator
 *
 */
public class TestCopyDirectory {

	public static void main(String[] args) {
		//指定源目录和目标目录
		String srcName = "D:\\FY18_01\\课堂笔记";
		String destName = "D:\\FY18_01\\tmp";
		
		//调用拷贝目录的方法
		copyDirectory(srcName, destName);
	}

	/**
	 * 拷贝目录
	 * @param srcName:源目录的抽象路径名
	 * @param destName:目标目录的抽象路径名
	 */
	private static void copyDirectory(String srcName, String destName) {
		//根据给定的源目录和目标目录的字符串创建File对象
		File source = new File(srcName);
		File dest = new File(destName);
		
		//判断当前sourceFile是文件还是目录
		if(source.isFile()) {	//如果是文件
			//调用拷贝文件的方法
			copyFile(source, dest);	
		}else{//开始拷贝目录
			//第一步先确定该目录下的子文件和目录
			String[] files = source.list();
			
			//获取当前的源目录和目标目录的绝对路径名称
			String srcPath = source.getAbsolutePath();
			String destPath = dest.getAbsolutePath();
			
			//转化路径名称为File对象
			File sFile;
			File dFile;
			
			//对当前目录中的子目录和文件进行遍历
			for(int i = 0; i < files.length; i++) {
				//创建File对象
				sFile = new File(srcPath, files[i]);
				dFile = new File(destPath, files[i]);
				
				//判断当前的File对象是目录还是文件
				if(sFile.isFile()) {
					//调用拷贝文件的方法
					copyFile(sFile, dFile);
				}else{
					//向目标路径创建目录
					dFile.mkdir();
					copyDirectory(sFile.getAbsolutePath(), dFile.getAbsolutePath());
				}
			}
			
		}
	}

	/**
	 * 拷贝文件
	 * @param source:源文件
	 * @param dest:目标文件
	 */
	private static void copyFile(File source, File dest) {
		//定义文件输入流对象
		FileInputStream fis = null;
		//定义文件输出流对象
		FileOutputStream fos = null;
		
		try {
			//创建流对象
			fis = new FileInputStream(source);
			fos = new FileOutputStream(dest);
			
			//定义缓冲数组
			byte[] buff = new byte[1024];
			//定义变量保存读到的字节数
			int len = 0;
			
			//循环读取
			while((len = fis.read(buff)) != -1){
				//将读到的数据写到输出流中
				fos.write(buff, 0, len);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			try {
				fis.close();
				fos.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

 

相关标签: jav