Java 如何替换文本行
我正在尝试替换文件中的特定文本行。我有一个问题,因为下面的代码更改了每行代码上的每个IDJava 如何替换文本行,java,text,file-io,Java,Text,File Io,我正在尝试替换文件中的特定文本行。我有一个问题,因为下面的代码更改了每行代码上的每个ID String filepath = "data.txt"; String newID = textFId.getText() String newRoadName = textFRname.getText(); String newRoadNumber = textFRnumber.getText(); String newCarType = textFCart
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
这一部分是我们没有遵循的:
String newID = textFId.getText()
String newRoadName = textFRname.getText();
String newRoadNumber = textFRnumber.getText();
String newCarType = textFCartype.getText();
textFId、textFRname、textFRnumber和textFCartype从哪里来?newID不应该等于其中的.next()吗?像@TomBunting所说的那样更好地清理你的代码,你会发现通过确保你的代码干净、简洁和可编译(即使它目前没有达到你期望的效果),你会得到更多有用的答案——看这似乎是可行的。有什么问题吗?只需使用
文件.readAllLines
。更容易的是,代码应该更新行的一部分。由于某种原因,我需要能够立即更新该行的每个部分。如果我尝试将该行的ID部分更新为不同的数字,则会将每行上的每个ID更改为相同的数字。我也希望能够改变线路的任何部分。我的JTable中有用户文本字段来执行此操作。这些部分来自以下文本字段:btnUpdate.addActionListener(new ActionListener(){@Override public void actionPerformed(ActionEvent e){//I=所选行的索引int I=table.getSelectedRow();if(I>=0){model.setValueAt(textFId.getText(),i,0);model.setValueAt(textFRname.getText(),i,1);model.setValueAt(textFRnumber.getText(),i,2);model.setValueAt(textFCartype.getText(),i,3);}
很抱歉,我试图格式化此答案时遇到困难…代码来自按钮。String newID=textFId.getText()
指的是文本字段用户输入字段,当单击更新按钮时,它会更新该行该部分的数据