java实现文件拷贝

java实现文件拷贝

java实现文件拷贝主要用到File类和FileinputStream和FileoutputStream方法

拷贝主体

要拷贝文件,就得有源文件和你要拷贝到的目标目录,这里我们可以设置两个参数:源文件:“File source”,要拷贝到的目标目录"File targetDir"。
首先先判断目标目录是否存在,若果不存在就创建它,这一步分别用exists()、mkdir()实现。

		if (!targetDir.exists()) {
			targetDir.mkdirs();
		}

根据提供的源文件文件名,结合目标目录构建一个目标文件对象

		File target = new File(targetDir, sourceFile.getName());

开始拷贝,此时开始使用流的知识,先用inputStream和outputStream分别获取源文件和和目标文件的字节输入\出流,将获取到的输入流读取到声明好的字节数组中,此时用len来表示读取到的字节数组的长度,最后将读取到的字节数组写入到输出流中,使用Write时,一定到写明读入的数组名,读取的起始位置和长度。最最后一定要讲两个流全部关闭,否则看不到效果。期间的异常全部捕获。下面是代码:

		InputStream is = null;
		OutputStream os = null;
		try {
			is = new FileInputStream(sourceFile);
			os = new FileOutputStream(target);
			byte[] b = new byte[1024];
			int len = 0;
			System.out.println("开始拷贝...");
			while ((len = is.read(b)) != -1) {
				os.write(b, 0, len);
			}
			System.out.println("拷贝完成...");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if (Objects.nonNull(os)) {
					os.close();
				}
				if (Objects.nonNull(is)) {
					is.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

判断目录

文件拷贝部分完成,然后再判断源文件是否是标准文件,标准文件即非目录文件,如果源文件是标准文件,则直接拷贝(上面做好的方法),源文件是目录的话,递归进入目录,重复执行创建目录行为。

if (source.isFile()) {
			copyFile(source, targetDir);
		}else {
			targetDir = new File(targetDir,source.getName());
			if (!targetDir.exists()) {
				targetDir.mkdirs();
			}
			//获取源目录下的所有子文件
			File[] subFiles = source.listFiles();
			if (subFiles != null) {
				for (int i = 0; i < subFiles.length; i++) {
					copy(subFiles[i], targetDir);
				}
			}
		}

测试

调用main方法

public static void main(String[] args) {
		File sourFile = new File("F:\\1");
		File tarFileDir = new File("E:\\");
		copy(sourFile, tarFileDir);	
	}

结果:
在这里插入图片描述
你学废了么?
下面是代码的全部体:

public class FileTools {
	public static void copy(File source,File targetDir) {
		if (source.isFile()) {
			copyFile(source, targetDir);
		}else {
			targetDir = new File(targetDir,source.getName());
			if (!targetDir.exists()) {
				targetDir.mkdirs();
			}
			File[] subFiles = source.listFiles();
			if (subFiles != null) {
				for (int i = 0; i < subFiles.length; i++) {
					copy(subFiles[i], targetDir);
				}
			}
		}
	}
	private static void copyFile(File sourceFile,File targetDir) {
		if (!targetDir.exists()) {
			targetDir.mkdirs();
		}
		File target = new File(targetDir, sourceFile.getName());
		InputStream is = null;
		OutputStream os = null;
		try {
			is = new FileInputStream(sourceFile);
			os = new FileOutputStream(target);
			byte[] b = new byte[1024];
			int len = 0;
			System.out.println("开始拷贝...");
			while ((len = is.read(b)) != -1) {
				os.write(b, 0, len);
			}
			System.out.println("拷贝完成...");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				if (Objects.nonNull(os)) {
					os.close();
				}
				if (Objects.nonNull(is)) {
					is.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
	public static void main(String[] args) {
		File sourFile = new File("F:\\1");
		File tarFileDir = new File("E:\\");
		copy(sourFile, tarFileDir);
		
	}
}
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值