public static void infoUpdate(String id, int fixLine, String prop, String changeContent, int wideOfLine){ String filename = "savings" + File.separator + id + ".txt"; try { // 读取文件 File file = new File(filename); BufferedReader reader = new BufferedReader(new FileReader(file)); String line = reader.readLine(); StringBuilder sb = new StringBuilder(); int lineNumber = 1; while (line != null) { for(int i = fixLine; i < fixLine + wideOfLine; i++){ if (lineNumber == fixLine) { // 修改第fixLine行 line = prop + ":" + changeContent; } } sb.append(line).append("\n"); lineNumber++; } reader.close(); // 将修改后的文本写回到文件中 FileWriter writer = new FileWriter(file); writer.write(sb.toString()); writer.close(); } catch (IOException e) { e.printStackTrace(); } }
时间: 2024-02-10 11:13:50 浏览: 125
egg-news:校内资讯服务器
这个方法似乎存在一个问题,就是在while循环中修改了line变量的值,但是并没有将修改后的值写入到sb中。如果想要实现修改指定行的内容,应该在for循环中将修改后的内容添加到sb中,例如:
```
while (line != null) {
if (lineNumber == fixLine) {
StringBuilder newLine = new StringBuilder();
for (int i = 0; i < wideOfLine; i++) {
if (i == prop) {
newLine.append(changeContent);
} else {
newLine.append(line.split(":")[i]);
}
if (i < wideOfLine - 1) {
newLine.append(":");
}
}
sb.append(newLine.toString()).append("\n");
} else {
sb.append(line).append("\n");
}
line = reader.readLine();
lineNumber++;
}
```
这里使用了一个新的StringBuilder变量newLine来存储修改后的内容,然后将newLine添加到sb中。同时,要注意在for循环中遍历每一列时,应该使用line.split(":")[i]来获取原始内容,而不是直接使用line变量。另外,在每次循环结束后,需要读取下一行的内容,否则会出现死循环的情况。
阅读全文