Java修炼——文件夹的复制

文件夹的复制用到了俩个流:缓冲流和文件字节流
缓冲流用来加快写入和读取速度。
在这里我简述一下复制文件夹的过程,当然复制文件夹都可以,复制文件更是不在话下

1.首先要明确俩点。要复制的文件夹的位置(源文件目录),还有一个就是你需 要复制到哪的文件夹位置(目的文件目录)。

2.就是判断目标文件是否文在,要是没有那就创建。

3.第三个就是获取传进来的源文件目录,遍历他。

4.然后就是分为俩步去复制,第一步就是判断是不是文件,是文件就直接复制,第二步,如果不是文件那就是目录,目录我们可以用递归的算法去将目录文件再去遍历,执行第一步。

5.最后就是打印文件,这里需要仔细看,我们需要的是文件目录,而不是文件夹 目录,因此我们需要在打印的目录后面拼接文件的名字。

请看代码
(所需要注意的就是在打印输出的时候,需要将文件夹名称后面拼接上文件的名字,这样就可以直接得到文件的目录了):

package com.bjsxt.ioproject;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class TestCopyFiles {
	public static void main(String[] args) {
		File srcDir=new File("F:\\****\\资料");
		File targetDir=new File("F:\\*****\\项目\\测试复制目录");
		CopyDir(srcDir, targetDir);
//		File srcFile=new File("F:\\*****\\项目\\day1\\note.txt");
//		File targetFile=new File("F:\\*****\\项目\\note.txt");
//		CopyFile(srcFile, targetFile);
	}
	public static void CopyDir(File srcDir,File targetDir) {
		if (!targetDir.exists()) {
			targetDir.mkdir();
		}
		File[] listFiles = srcDir.listFiles();//获取目录下的全部文件
		//遍历所有集合文件
		for (File file : listFiles) {
			if (file.isFile()) {
				//如果是文件,那就调用赋值文件的方法,并且需要拼接地址
				CopyFile(new File(srcDir+"//"+file.getName()), new File(targetDir+"\\"+file.getName()));
				System.out.println(file.getName()+"文件复制完成!");
			} else {
				//如果是目录,那就调用递归,自己调用自己
				CopyDir(new File(srcDir+"//"+file.getName()), new File(targetDir+"\\"+file.getName()));
				System.out.println(file.getName()+"文件夹复制完成!");
			}
		}
	}
	
	public static void CopyFile(File srcFile,File targetFile) {
		BufferedInputStream bis=null;
		BufferedOutputStream bos=null;
		try {
			bis = new BufferedInputStream(new FileInputStream(srcFile));
			bos = new BufferedOutputStream(new FileOutputStream(targetFile));
			byte [] b=new byte[1024];
			int len=0;
			while ((len=bis.read(b))!=-1) {
				bos.write(b, 0, len);
			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			if (bos!=null) {
				bos.close();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			if (bis!=null) {
				bis.close();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

运行结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值