将文件夹合并成一个文件和将合成的文件还原成文件夹

将文件夹合成一个文件、将合成的文件还原成文件夹

public static void main(String[] args) throws Exception {
	String dir = "C:\\Users\\lei.yan004\\Desktop\\临时文件\\合成测试\\";
	File dirPath = new File(dir + "待合成目录"); // 要合成的文件夹
	File saveFile = new File(dir + "待合成目录.txt"); // 合成后的文件保存位置
	FileWriter fileWriter = new java.io.FileWriter(saveFile, true);
	BufferedWriter bw = new BufferedWriter(fileWriter);

	// 将文件夹合成一个文件
	//mergeDir(dirPath, bw);
	bw.flush();
	bw.close();

	// 将文件还原为文件夹
	splitDir(dir, "C:\\Users\\lei.yan004\\Desktop\\临时文件\\合成测试\\还原\\", saveFile);
}

// 过滤
public static boolean isFilter(File file) {
	List<String> fileFilter = Arrays.asList(".git",".iml",".class",".jar");
	List<String> dirFilter = Arrays.asList(".git","target");
	String name = file.getName();
	if (file.isFile()) {
		 for (String string : fileFilter) {
			if(name.endsWith(string)) {
				return true;
			}
		}
		 
	}
	if (file.isDirectory()) {
		 if(dirFilter.contains(name)) {
			 return true;
		 }
	}

	return false;
}

// 合成
public static void mergeDir(File file, BufferedWriter bw) throws Exception {
	File[] fileArr = file.listFiles();
	if (null == fileArr || fileArr.length <= 0)// 部分文件夹 无权限访问,返回null
	{
		return;
	}
	for (File itemFile : fileArr) {
		if(isFilter(itemFile)) {
			continue;
		}
		if (itemFile.isFile()) {
			bw.newLine();
			bw.write("file-name:" + itemFile.getPath());

			FileReader fr = new FileReader(itemFile);
			BufferedReader bf = new BufferedReader(fr);

			String line;
			while ((line = bf.readLine()) != null) {
				bw.newLine();
				bw.write(line);
			}
			bw.flush();
			fr.close();
			bf.close();
		}
		if (itemFile.isDirectory()) {
			bw.newLine();
			bw.write("directory-name:" + itemFile.getPath());
			bw.flush();
			mergeDir(itemFile, bw);
		}
	}
}

// 还原
public static void splitDir(String oldPath, String newPath, File file) {
	try {
		FileReader fr = new FileReader(file);
		BufferedReader bf = new BufferedReader(fr);
		String line;
		// 按行读取字符串

		BufferedWriter bw = null;
		boolean isfirst = true;
		while ((line = bf.readLine()) != null) {
			if (line.startsWith("file-name:")) {
				if (bw != null) {
					bw.flush();
				}

				String fileDir = line.substring("file-name:".length(), line.lastIndexOf("\\"));
				String fileName = line.substring(line.lastIndexOf("\\") + 1);
				fileDir = fileDir.replace(oldPath, newPath);
				if (!new File(fileDir).exists()) {
					new File(fileDir).mkdirs();
				}

				File newFile = new File(fileDir + File.separator + fileName);
				newFile.createNewFile();
				FileWriter fileWriter = new FileWriter(newFile, true);
				bw = new BufferedWriter(fileWriter);
				isfirst = true;
			} else if (line.startsWith("directory-name:")) {
				String fileDir = line.substring("directory-name:".length());
				fileDir = fileDir.replace(oldPath, newPath);
				if (!new File(fileDir).exists()) {
					new File(fileDir).mkdirs();
				}
			} else {
				if (bw != null) {
					if (!isfirst) {
						bw.newLine();
					}
					bw.write(line);
					bw.flush();
					isfirst = false;
				}
			}
		}
		bf.close();
		fr.close();
		if (bw != null) {
			bw.flush();
			bw.close();
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值