【发布时间】:2018-06-22 16:47:01
【问题描述】:
我正在尝试替换文件中的特定文本行。我遇到了一个问题,因为下面的代码会更改每行代码上的每个 ID。
String filepath = "data.txt";
String newID = textFId.getText()
String newRoadName = textFRname.getText();
String newRoadNumber = textFRnumber.getText();
String newCarType = textFCartype.getText();
String tempFile = "datatemp.txt";
File oldFile = new File(filepath);
File newFile = new File(tempFile);
String ID = "";
String RoadName = "";
String RoadNumber = "";
String CarType = "";
try {
FileWriter fw = new FileWriter(tempFile, true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
x = new Scanner(new File(filepath));
x.useDelimiter("[,\n]");
while(x.hasNext()) {
ID = x.next();
RoadName = x.next();
RoadNumber = x.next();
CarType = x.next();
if(ID.equals(newID)) {
System.out.println(newID);
pw.println(newID + "," + newRoadName + "," + newRoadNumber + "," + newCarType);
} else {
pw.println(ID + "," + RoadName + "," + RoadNumber + "," + CarType);
System.out.println(newID);
}
}
x.close();
pw.flush();
pw.close();
oldFile.delete();
File dump = new File(filepath);
newFile.renameTo(dump);
}
catch (Exception e3){
System.out.println("UPDATE ERROR!!");
}
我的文本文件是这样的:
1,PO,100,GB
2,PO,101,GB
3,PO,102,GB
4,PO,103,GB
当我更新一行时,我的输出应该是这样的:
1,PO,100,GB
2,PO,101,GB
3,PO,102,GB
4,PO,104,GB
但是我的输出结果是这样的:
4,PO,104,GB
4,PO,104,GB
4,PO,104,GB
4,PO,104,GB
【问题讨论】:
-
不应该 newID 等于 .next() 在某处吗?正如@TomBunting 所说,清理你的代码更好
-
您会发现,通过确保您的代码干净、简洁和可编译(即使它目前没有达到您的预期),您会获得更多有用的答案 - 请参阅 stackoverflow.com/help/mcve
-
这似乎有效。有什么问题?
-
只需使用
Files.readAllLines。更容易 -
代码应该更新行的一部分。出于某种原因,如果我尝试将行的 ID 部分更新为不同的数字,我需要能够立即更新行的每个部分,它会将每行上的每个 ID 更改为相同的数字。我还希望能够更改线路的任何部分。我的 JTable 中有用户文本字段来执行此操作。