用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();
	 * }
	 * 
	 */

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章