用Java开发一个简单的文本文件字符串替换程序

 最近工作遇到这样一个需求,就是将某个目录下的所有pom.xml文本文件里的"0.2-SNAPSHOT"替换成"0.1-SNAPSHOT"。

 如果手动改会特别麻烦,而且容易遗漏。所以在网上简单找了下相关文章,稍微拼凑了一下实现了这个需求。

 基本原理就是递归目录下的所有文件,找到以pom.xml结尾的文件,然后找到一个就替换一个,替换的方法是先读取文本内容,用String类的replaceAll替换,最后再写回文件。代码如下:

import java.io.*;
public class App {
	public static String read(File file) {
		StringBuffer res = new StringBuffer();
		  String line = null;
		  try {
		   BufferedReader reader = new BufferedReader(new FileReader(file));
		   while ((line = reader.readLine()) != null) {
		    res.append(line + "\n");
		   }
		   reader.close();
		  } catch (FileNotFoundException e) {
		   e.printStackTrace();
		  } catch (IOException e) {
		   e.printStackTrace();
		  }
		  return res.toString();
	 }
 
	 public static boolean write(String cont, File dist) {
		 try {
		   BufferedWriter writer = new BufferedWriter(new FileWriter(dist));
		   writer.write(cont);
		   writer.flush();
		   writer.close();
		   return true;
		 } catch (IOException e) {
		   e.printStackTrace();
		   return false;
		 }
	 }
	public static void recursiveTraversalDir(File[] files) throws Exception {
		if (files == null)
			return;
		for (File f : files) {
			String fileName = f.getAbsolutePath();
			// 这里定义了文本文件类型
			if (f.isFile() && fileName.endsWith("pom.xml")) {
				String cont = read(f);
				  // 这里开始替换. eg.把文件中的所有"0.2-SNAPSHOT"替换成"0.1-SNAPSHOT"
				  cont = cont.replaceAll("0.2-SNAPSHOT", "0.1-SNAPSHOT");
				  write(cont, f);
			} else if (f.isDirectory()) {
				recursiveTraversalDir(f.listFiles());
			}
		}
	}

	public static void main(String[] args) throws Exception {
		  File file = new File("").getAbsoluteFile(); 
		  File[] files = file.listFiles();
		  recursiveTraversalDir(files);
	}
}

运行方法是到编译后要替换的目录下运行java App, 也可以打包成可执行jar。代码写得很烂,后续看能否升级,欢迎提意见和优化。

下面代码是我折腾的过程,可以忽略。

	/* 这个是上一版本, 针对目录下pom.xml文件, 替换特定节点下元素的值, 用到dom4j, 需要导入相关依赖
	 * 把parent根元素下的version元素里的设置成0.1-SNAPSHOT
	 * public static void replaceElementContent(File file) throws Exception {
	 * SAXReader reader = new SAXReader(); Document document = reader.read(file);
	 * Element rootElem = document.getRootElement(); if (rootElem.element("version")
	 * != null) { rootElem.element("version").setText("0.1-SNAPSHOT"); } Element
	 * pElem = rootElem.element("parent");
	 * pElem.element("version").setText("0.1-SNAPSHOT"); XMLWriter writer = new
	 * XMLWriter(new FileWriter(file)); writer.write(document); writer.close();
	 * }
	 * 
	 */

 

你可能感兴趣的:(javaSE)