最近工作遇到这样一个需求,就是将某个目录下的所有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();
* }
*
*/
734

被折叠的 条评论
为什么被折叠?



