最近工作遇到這樣一個需求,就是將某個目錄下的所有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();
* }
*
*/