给大家推荐个靠谱的公众号程序员探索之路,大家一起加油
思路:将目标文件内容读出来然后加上,修改所需内容,存储在临时文件中,将源文件清空,临时文件的内容读回去
package com.zzh.FileUtils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
//思路:一边读一边写(写入的文件时临时文件) 然后将临时文件中的内容写回去
public class ChangeToChain {
public void chain(File file) throws Exception {
// 临时文件
File file2 = new File("src/temp.txt");
// 读取目标文件的流
BufferedReader reader = null;
// 写入目标文件的流
BufferedWriter writer = null;
// 获取目标文件中四所有的文件
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
writer = new BufferedWriter(new FileWriter(file2));
reader = new BufferedReader(new FileReader(files[i]));
String className = "";
String str = "";
// 判断是否要加上return
boolean flag = false;
while ((str = reader.readLine()) != null) {
if (str.indexOf("class") != -1) {
writer.write(str);
className = getClassName(str);
} else if (str.indexOf("set") != -1) {
int start = str.indexOf("void");
int end = start + 4;
// 将void替换为该类的类名
str = new StringBuffer(str).replace(start, end, className)
.toString();
writer.write(str);
flag = true;
} else if (flag && str.indexOf(";") != -1) {
writer.write(str);
writer.newLine();
writer.write(" return this;");
flag = false;
} else {
writer.write(str);
flag = false;
}
writer.newLine();
writer.flush();
}
// 写回
System.out.println(file2.toString()+"\n"+files[i].toString());
//必须先关闭流再写回 否则临时文件不会情空
reader.close();
writer.close();
writeBack(file2, files[i]);
// 清空临时文件
cleanFile(file2);
}
}
// 清空文档
public void cleanFile(File file) throws IOException {
System.out.println(file.delete());
System.out.println(file.createNewFile());
}
// 获取文件的类名
public String getClassName(String str) {
int start = str.indexOf("class")+6;
int end = str.indexOf("{");
return str.substring(start, end);
}
// 写回文件中去 临时文件 写回文件
public void writeBack(File fl1, File fl2) throws Exception {
// 清空写回的文件
cleanFile(fl2);
BufferedWriter writer = new BufferedWriter(new FileWriter(fl2));
BufferedReader reader = new BufferedReader(new FileReader(fl1));
String str = "";
while ((str = reader.readLine()) != null) {
if (!str.equals("")) {
writer.write(str);
writer.newLine();
writer.flush();
}
}
writer.close();
reader.close();
}
//读出临时文件内容
public void reanLinShi(File file2) throws IOException{
BufferedReader reader = new BufferedReader(new FileReader(file2));;
String str = "";
while ((str = reader.readLine()) != null) {
System.out.println(str);
}
reader.close();
}
}