【问题标题】:Finding a line in a text file and editing it在文本文件中查找一行并编辑它
【发布时间】:2016-06-10 02:52:29
【问题描述】:

我有以下代码:

   String mID = jTextField1.getText();
   String mType = jComboBox1.getSelectedItem().toString();
   String mFName = jTextField2.getText();
   String mLName = jTextField3.getText();
   String mHomePhone = jTextField4.getText();
   String mMobilePhone = mPhone2.getText();
   String mEmail = jTextField6.getText();
   String mHomeAddress = jTextField7.getText();
   //Defines the new line of data
   String newLine = (mID + " | " + mType + " | " + mFName + " | " + mLName + " | "
   + mHomePhone + " | " + mMobilePhone + " | " + mEmail + " | " + mHomeAddress); 

    try {
        File inFile = new File("Members2.txt");
        BufferedReader br;
        FileReader reader;
        try (PrintWriter writer = new PrintWriter(new BufferedWriter( new FileWriter("Member2_Temp.txt", true)))) {
           br = new BufferedReader(new FileReader(inFile));
           reader = new FileReader("Members2.txt");
           String line;
           while (null != (line = br.readLine())) {
               if (newLine.equals(line)) {
                   newLine = line.replace(line, newLine);
               }
               // Always write the line, whether you changed it or not.
               writer.println(newLine);
           }
            br.close();
            reader.close();
            writer.close();
       }

        File tempFile = new File("Member2_Temp.txt");
        Path source = tempFile.toPath();
        Path newdir = inFile.toPath();
        Files.move(source, newdir, REPLACE_EXISTING);

        dispose();
        new Edit_Member_Final().setVisible(true);

    } catch (IOException ex) {
        Logger.getLogger(Edit_Member_Final.class.getName()).log(Level.SEVERE, null, ex);
    } 

问题在于它只将已编辑的行打印到文件中,而不打印其余未编辑的行。

如果我有 4 条记录,程序会出于某种原因打印编辑行 4 次。我该如何解决?

【问题讨论】:

  • 我相信您会从其他人那里找到许多好的解决方案。我只是想添加一条评论,说明当文件大小不存在内存限制时,您可以先将整个文件加载到字符串中,创建修改后的字符串,然后将其序列化回磁盘。这样做的好处是您可以通过自己的代码或通过在 JUnit 中设计的测试等来测试您的替换方法。

标签: java rename file-writing


【解决方案1】:

编辑

           BufferedReader br;
            try (PrintWriter writer = new PrintWriter(new BufferedWriter( new FileWriter("Member2_Temp.txt", true)))) {
               br = new BufferedReader(new FileReader(inFile));
               String line;

               while (null != (line = br.readLine())) {
                   if (newLine.equals(line)) {
                       line = line.replace(line, newLine);
                   }

                   // Always write the line, whether you changed it or not.
                   writer.println(line);
               }
                br.close();
                writer.flush();
                writer.close();

你只写newLine,只有找到匹配时才会有数据

writer.println(newLine);

line也应该这样写,加上else条件

if (newLine.equals(line)) {
    line= line.replace(line, newLine);
}

writer.println(line);

【讨论】:

  • 我是否让 while 循环保持不变?还是我将其更改为 newLine = br.readLine()?
  • 它似乎没有打印到文件中。现在记录保持不变。
  • 似乎仍然无法打印 :(
  • @JSmithers 立即尝试,并进行编辑。当它们相等时,Aslo 替换 String 没有任何意义。 ?您要检查该行是否包含该数据吗?
  • @JSmithers 你能解释一下,到底发生了什么,我复制了相同的代码并且工作正常
猜你喜欢
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 2016-06-29
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多