java实现文件拷贝

  • Post author:
  • Post category: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);
		
	}
}



版权声明:本文为YoungProMaker原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。