求教:java对文件操作,如何在文件中指定位置插入一些内容
如:
public class Test{
public void test_1(){
......
}
public String test_2(...){
插入相关内容
}
}
如:
public class Test{
public void test_1(){
......
}
public String test_2(...){
插入相关内容
}
}
1、批量插入逻辑实现类似权限检查等
解决:你不用插入用AOP相关技术
2、你想批量重构代码
解决:
基本的:用流读入文件,用正则表达式匹配到插入点,插入逻辑并写回原文件。
高级点用:eclipse的语法树。
不过你的精神请令人敬佩的。那我就较为详细点来说吧。
基本的:
你通过文件流将java文件读入到内存中,然后用正则表达式匹配到插入点,插入逻辑,将结果写会文件就好了。
什么?你要代码?不好意思,这个我真没有现成的。你问百大叔要,要不谷老师那里也有。
高级点的:
有没有想过eclipse是如何帮助你完成get set方法的,如何在你修改一个类名,其他的类名全部变化的?
这就是eclipse JDT完成的,相关的如jet可以自动生成代码,ast可以构建抽象语法树,这个可以帮助你完成你要的功能。
ast本身不是很复杂。但是网上的资料比较少。我以前在给公司写代码生成工具的时候用过,具体主要是看api。它提供了诸如获得某个方法,获得某个方法下的循环语句,等等都有api可以用,让你如同操作Dom一样操作java源文件。
不过你初学,就知道有这么个事就行了。等你牛了再研究吧。
public static void main(String[] args){
try{
File read = new File("3.txt");
File write = new File("4.txt");
BufferedReader br = new BufferedReader(
new FileReader(read));
BufferedWriter bw = new BufferedWriter(
new FileWriter(write));
String temp = null;
temp = br.readLine();
while(temp != null){
temp = temp.trim();
temp = temp.replaceAll("[\\u4e00-\\u9fa5]", "");
temp = temp.replaceAll(" ", "\r\n");
//写文件
bw.write("if(a.tel.contains(\""+temp +"\")){\r\n a.fromPlace=null;\r\na.toPlace = null;\r\n}\r\n"); //只适用Windows系统
//继续读文件
temp = br.readLine();
}
bw.close();
br.close();
}catch(FileNotFoundException e){ //文件未找到
System.out.println (e);
}catch(IOException e){
System.out.println (e);
}
}
}
String devfilepath = workPath + File.separator + "group1"
+ File.separator + "scenario1" + File.separator
+ "device_test.dev";
StringBuffer sb = new StringBuffer();
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader(devfilepath));
String line = null;
while ((line = in.readLine()) != null) {
sb.append(line + '\n');
}
} finally {
if (in != null) {
in.close();
}
}
String needStr = "<include file=\"filename1\"";
int startindex = sb.indexOf(needStr);
// 输入内容
String outStr = "<include file=\"myfile.cpp\"";
sb.replace(startindex, startindex+needStr.length(), outStr);
FileWriter f = new FileWriter(new File(devfilepath));
f.write(sb.toString());
f.flush();
f.close();