【问题标题】:How to replace line of text如何替换文本行
【发布时间】: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 中有用户文本字段来执行此操作。

标签: java text file-io


【解决方案1】:

这部分是我们不关注的:

    String newID          = textFId.getText()
    String newRoadName    = textFRname.getText();
    String newRoadNumber  = textFRnumber.getText();
    String newCarType     = textFCartype.getText();

textFId、textFRname、textFRnumber 和 textFCartype 来自哪里?

【讨论】:

  • 这些部分来自以下文本字段:btnUpdate.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // i = the index of the selected row 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() 指的是文本字段用户输入字段,当单击更新按钮时,它会更新该行部分中的数据
猜你喜欢
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 2010-10-16
  • 2012-06-24
  • 2020-05-06
相关资源
最近更新 更多