I/O流 , 通过字节流实现 (文件夹-文件夹;文件-文件夹;文件-文件)的Copy

时间:2023-02-12 21:37:13

很久没更新博客了,这段时间很忙,今天抽个午休的时间发表一份博客,来给大家展示一下I/O流。

思路:首先我们把这个题目剖析一下,可以先通过输入输出流把单个文件的方法写出来,在处理文件夹的复制的时候,首先肯定是先把文件夹目录下所有的文件夹和文件遍历出来,小编在这里用的是(递归深度遍历),通过循环这样目录下就变成单个文件和文件夹,在通过调用前面我们写出的单个文件的复制,这样基本就完成了题目,值得注意的是在文件夹复制到文件夹时,是把被复制的文件夹放到新文件夹目录下。

代码如下:

	public static void fileCopy(String file, String newFile) {

		File files = new File(file);
		File newfiles = new File(newFile);
		// 判断是否是个目录
		if (files.isDirectory()) {
			// 对空的文件夹进行创建
			if (!newfiles.exists()) {
				newfiles.mkdirs();
			}
			String[] strfile = files.list();
			// 遍历文件和目录
			for (String newstr : strfile) {
				// 创建新的File实例
				File fastfile2 = new File(files, newstr);

				File lastfile3 = new File(newfiles, newstr);

				// 递归调用
				fileCopy(fastfile2.getAbsolutePath(),
						lastfile3.getAbsolutePath());
			}

		} else {
			FileInputStream fileInputStream = null;
			FileOutputStream fileOutputStream = null;

			byte[] bytes = new byte[512];
			int len = 0;
			try {

				fileInputStream = new FileInputStream(files);
				if (!newfiles.isDirectory()) {
					fileOutputStream = new FileOutputStream(newfiles);
				} else {
					fileOutputStream = new FileOutputStream(
							new File(newfiles.getAbsolutePath() + "\\"
									+ files.getName()));
				}

				while ((len = fileInputStream.read(bytes)) != -1) {
					fileOutputStream.write(bytes, 0, len);
				}

			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();

			} finally {
				if (fileInputStream != null) {
					try {
						fileInputStream.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}

				if (fileOutputStream != null) {
					try {
						fileOutputStream.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}

	}

这段代码可以剖析方法,本人在这里把它们合在一起了。

请读者自己创建文件夹和文件进行测试。

下篇小编将写一个通过字符流来实现文件夹/文件的Copy.