Java文件夹复制操作(FileInputStream、FileOutputStream)

Java文件夹复制操作

字节输入流FileInputStream、字节输出流FileOutputStream

  • 通过递归算法将源文件夹的文件及文件夹进行递归遍历
  • FileInputStream读取文件,通过FileOutStream将文件写到目标路径中
package IO流;

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

/**
 * 复制文件夹
 * 
 * @author hp
 *
 */
public class Test3 {

	public static void main(String[] args) {
		File source = new File("d:/temp");
		File target = new File("d:/temp2/Test");

		listFiles(source, target);
		System.out.println("复制完毕!");
	}
	/**
	 * 罗列文件及文件夹
	 * 递归遍历执行copyFile方法最终实现文件夹复制
	 * @param source
	 * @param target
	 */
	public static void listFiles(File source, File target) {
		//定义File数组
		File[] files = null;
		if (source.exists()) {
			//将source路径下的所有文件列出来,通过listFiles方法返回File数组
			files = source.listFiles();
		}
		if(!target.exists()) {
			//target目标文件夹不存在时,创建target文件夹
			target.mkdirs();
			System.out.println("创建一个"+target.getAbsolutePath()+"文件夹");
		}
		//如果source文件下存在文件及文件夹执行for循环语句
		if(files!=null) {
			for(int i=0;i<files.length;i++) {
				//创建一个File对象
				File temp=new File(target,files[i].getName());
				//判断是否是文件,false则是文件夹
				if(files[i].isFile()) {
					//执行copuFile()方法复制文件
					copyFile(files[i],temp);
				}else {
					//当for循环遍历到一个文件夹时,递归调用listFiles()方法
					listFiles(files[i],temp);//重要操作!!!
				}
			}
		}
	}
	/**
	 * 复制文件
	 * @param source
	 * @param target
	 */
	public static void copyFile(File source, File target) {
		// 定义变量
		FileInputStream fi = null;
		FileOutputStream fo = null;

		try {
			// 初始化IO流对象
			fi = new FileInputStream(source);
			fo = new FileOutputStream(target);

			// 定义字节数组,用来存放输入流读取的字节
			byte[] b = new byte[1024];
			// 定义一个整型len,主要用来记录输入流读取字节长度,
			// 1 判断文件是否读取完毕 2 确定输出流写入到文件的字节数
			int len = 0;

			// 输入流读取文件到末尾时,返回-1
			while ((len = fi.read(b)) != -1) {
				// 输出流将字节数组写入到文件中去
				fo.write(b, 0, len);
			}

			System.out.println(source.getAbsolutePath()+"--->>>"+target.getAbsolutePath()+"复制完成!");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 关闭IO流!!!
			if (fi != null) {
				try {
					fi.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if (fo != null) {
				try {
					fo.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

}

运行结果

创建一个d:\temp2\Test文件夹
d:\temp\44588de6-41d3-4622-b853-0a66396cba39.jpg--->>>d:\temp2\Test\44588de6-41d3-4622-b853-0a66396cba39.jpg复制完成!
创建一个d:\temp2\Test\a文件夹
创建一个d:\temp2\Test\a\a文件夹
创建一个d:\temp2\Test\a\a\a文件夹
创建一个d:\temp2\Test\a\a\a\a文件夹
d:\temp\a\a\a\test2.zip--->>>d:\temp2\Test\a\a\a\test2.zip复制完成!
d:\temp\a\a\test2.zip--->>>d:\temp2\Test\a\a\test2.zip复制完成!
d:\temp\a\test2.zip--->>>d:\temp2\Test\a\test2.zip复制完成!
d:\temp\a\新建位图图像.bmp--->>>d:\temp2\Test\a\新建位图图像.bmp复制完成!
d:\temp\a\新建文本文档.txt--->>>d:\temp2\Test\a\新建文本文档.txt复制完成!
d:\temp\b3d83a8c-1696-427d-b847-bc14509cd276.jpg--->>>d:\temp2\Test\b3d83a8c-1696-427d-b847-bc14509cd276.jpg复制完成!
d:\temp\f0da2deb-5d4f-46ad-bc9a-e9c962360db4.jpg--->>>d:\temp2\Test\f0da2deb-5d4f-46ad-bc9a-e9c962360db4.jpg复制完成!
d:\temp\f151a814-4a98-4e66-9bb3-c8d610975041.jpg--->>>d:\temp2\Test\f151a814-4a98-4e66-9bb3-c8d610975041.jpg复制完成!
创建一个d:\temp2\Test\test文件夹
创建一个d:\temp2\Test\test\e文件夹
d:\temp\test\e\test2.txt--->>>d:\temp2\Test\test\e\test2.txt复制完成!
d:\temp\test\e\test3.txt--->>>d:\temp2\Test\test\e\test3.txt复制完成!
d:\temp\test\e\test4.txt--->>>d:\temp2\Test\test\e\test4.txt复制完成!
d:\temp\test\test2.txt--->>>d:\temp2\Test\test\test2.txt复制完成!
d:\temp\test\test3.txt--->>>d:\temp2\Test\test\test3.txt复制完成!
d:\temp\test\test4.txt--->>>d:\temp2\Test\test\test4.txt复制完成!
d:\temp\test.txt--->>>d:\temp2\Test\test.txt复制完成!
d:\temp\test.xmind--->>>d:\temp2\Test\test.xmind复制完成!
d:\temp\test.zip--->>>d:\temp2\Test\test.zip复制完成!
d:\temp\test2.txt--->>>d:\temp2\Test\test2.txt复制完成!
d:\temp\test2.zip--->>>d:\temp2\Test\test2.zip复制完成!
d:\temp\test3.txt--->>>d:\temp2\Test\test3.txt复制完成!
d:\temp\test4.txt--->>>d:\temp2\Test\test4.txt复制完成!
复制完毕!

-------如果想使用BufferedInputStream、BufferedOutputStream进行文件夹复制操作的话,可以将FileInputStream、FileOutputStream作为节点流操作即可

例如:

BufferedInputStream br=new BufferedInputStream(new FileInputStream);
BufferedOutputStream br=new BufferedOutputStream(new FileOutputStream);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值