IO流之复制文件夹

3 篇文章 0 订阅

文件夹的拷贝需要考虑许多细节。。。
下面直接看代码`

package io;

import java.awt.image.ImagingOpException;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * 文件夹拷贝 1.文件直接复制 2.文件夹创建mkdirs() 3.递归查找子孙级
 * 
 */
public class Filecopy2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
//源目录
		String srcPath = "e:/xp/test/study";
		// 目标目录
		String destPath = "e:/xp/test/study1";
		File src = new File(srcPath);
		File dest = null;
		if (src.isDirectory()) {//
			// isDirectory()是检查一个对象是否是文件夹。返回值是boolean类型的。如果是则返回true,否则返回false。
			dest = new File(destPath, src.getName());

		}
		copyDirDetail(src, dest);
	}
//public static void 
	/**
	 * 拷贝文件夹的细节
	 * 
	 */
	public static void copyDirDetail(File src, File dest) {
		// TODO Auto-generated method stub
		if (src.isFile()) {
			try {// 文件
				FileUnit.copyFile(src,dest);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {// 文件夹
				// 明确目标文件夹存在
				e.printStackTrace();

			}
		} else if (src.isDirectory()) {// 文件夹
			// 确保目标文件夹存在
			dest.mkdirs();
			// 获取下一级目录|文件
			for (File sub : src.listFiles()) {// 测试此抽象路径名表示的文件是否是一个标准文件
				copyDirDetail(sub, new File(dest, sub.getName()));
			}

		}

	}
}

package io;

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

public class FileUnit {

	/**
	 * 
	 * 文件的拷贝 源文件的路径 目录文件路径
	 * 
	 * @throws FileNotFoundException IOException
	 *
	 */
	public static void copyFile(String srcPath,String destPath) throws FileNotFoundException, IOException {

		// 1.建立联系(存在且为文件)+目的地(文件可以不存在)
		File sre=new File(srcPath);
		File dest=new File(destPath);
		copyFile(new File(srcPath), new File(destPath));

	}

	public static void copyFile(File src,File dest) throws FileNotFoundException, IOException {

		if (!src.isFile()) {// 不是文件夹或者为null
			System.out.println("只能拷贝文件");
			throw new IOException("只能拷贝文件");
		}
		// 2.选择流
		InputStream is = new FileInputStream(src);
		OutputStream os = new FileOutputStream(dest);
		// 3.文件拷贝 循环+读取+写出
		byte[] flush = new byte[1024];

		// 这句话的意思就是说你先定义了一个byte类型的数组,数组长度为1024。也就是说你最多可以存1024个字节的东西,如果超过这个值就会报溢出的异常了
		int len = 0;
		try {// 读取
			while (-1 != (len = is.read(flush))) {
				// 写出
				os.write(flush, 0, len);

			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("读取文件失败");
		}
		os.flush();// 强制刷出
		// 关闭流
		os.close();
		is.close();
	}

	
	
}

```如有不足请指正,谢谢

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值