JAVA入门篇,第20天,文件或者目录的拷贝实现方法

一、文件或目录的拷贝

     此次程序里面涉及到了IO流,运用到了IO流中的字节流(FileInputStream,FilOutputSream),流的学习其实是很有规律的,一般都是成对出现,有输入流就有对应的输出流(特别提示,这里打印流是列外),这里既然是文件的拷贝,肯定也涉及到了File类的一般常用方法的调用。

      注意在本次程序中,用到了一个非常实用的方法,就是方法的回调(个人理解,比较像循环语句一样,一直循环使用,达到了某个条件就结束循环一样)话不多说,上图。 

运行完毕之后没有任何报错:这里我是将D盘的javacode文件夹下的内容,拷贝到E盘下的javacode1文件夹下。

 


 效果:

这是D盘里的文件

  

 这是E盘里的文件:

    

二、代码如下:



import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Objects;

public class Test2 {

	public void findAll(File source, File target) {

		File[] file = source.listFiles();
		if (Objects.nonNull(file)) {
			for (int i = 0; i < file.length; i++) {
				File sour = file[i];
				File tar = new File(target, sour.getName());//考虑容错问题
//				if(!tar.exists()){
//					if(!tar.mkdir()){
//						System.out.println("失败失败");
//					}
//				}
				if (sour.isFile()) {
					copy(sour, tar);
				} else {
					tar.mkdir();
					findAll(sour, tar);
				}
			}
		}
	}

	public void copy(File source, File target) {
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			fis = new FileInputStream(source);
			fos = new FileOutputStream(target);
			byte[] b = new byte[1024];
			int len = 0;
			while ((len = fis.read(b)) != -1) {
				fos.write(b, 0, len);
			}
		} catch (Exception e) {

		} finally {
			if (fis != null) {
				try {
					fis.close();
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

	public static void main(String[] args) {
		File f1 = new File("D:\\javacode");
		File f2 = new File("E:\\javacode1");
		new Test2().findAll(f1, f2);

	}
}

 三、总结

           在实现这个文件拷贝之前,我是将之前所学的,File类, 字节流,联系到一起,这个方法可能不是最佳写法,建议可以考虑文件的容错问题(比如文件已存在怎么处理),实现原理基本一致,做这个方法之前,一定要在脑海有IO流的一个整体框架图,做起来才可能事半功倍!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值