我正在尝试修改现有的下面的文件。
User navigates to Facebook
Given I am on Facebook login page
Scenario: enter username as "TOM"
And I enter password as "JERRY"
Feature: annotation
Background:
User navigates to Facebook
Given I am on Facebook login page
But Relogin option should be available
我尝试使用以下代码并清除文件内容!
public void addTags(File file) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String line;
BufferedWriter bw = null;
FileWriter fw = null;
int count = 0;
while ((line = bufferedReader.readLine()) != null) {
fw = new FileWriter(file);
fw.write(line);
fw.write("\n");
fw.close();
}
bufferedReader.close();
}
请纠正我..我的代码有什么问题。
答案 0 :(得分:3)
在编写文件之前,您必须先阅读该文件。
因此,首先逐行将文件读入ArrayList。
使用Files.readAllLines(yourPath)
可以轻松实现。
之后,只需迭代列表并按原样写入文件即可。别忘了关闭BufferedWriter
。
我建议在try-block中初始化它:
尝试(BufferedWriter bw = new BufferedWriter(new FileWriter(yourFile))){ //写你的文件 }
这样你就不必处理作家的结束了。
就像那样:
private static void readWrite(Path filePath) throws IOException {
List<String> allLines = Files.readAllLines(filePath);
int count = 0;
try (BufferedWriter bw = new BufferedWriter(new FileWriter(filePath.toFile()))) {
for (String line : allLines) {
if (line.trim().contains("Scenario")) {
count++;
bw.write("@tag" + count);
bw.write("\n");
}
bw.write(line);
}
}
}
答案 1 :(得分:1)
你的问题出在这行代码中
fw = new FileWriter(file);
首先,你在while循环中初始化fw。每次循环执行时都会重新初始化。 其次,您无法读取和写入同一文件。您必须创建新文件,从旧文件复制,插入新数据,复制休息等。如果您希望新文件表现为已编辑的旧文件,则必须删除旧文件并重命名新文件。 你的bw也没有初始化;
固定代码应如下所示:
public void addTags(File file) throws IOException {
File tmp = new File(temp.txt);
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
BufferedWriter bw = new BufferedWriter(new FileWriter(tmp));
String line;
int count = 0;
while ((line = bufferedReader.readLine()) != null) {
if (line.trim().contains("Scenario")) {
count++;
bw.write("@tag" + count);
bw.write("\n");
}
fw.writeLine(line);
}
fw.close();
bufferedReader.close();
String newName = file.getName();
Files.delete(file);
tmp.renameTo(newName);
}