查找在文本文件中的一行,并对其进行编辑

问题描述:

我有以下代码:查找在文本文件中的一行,并对其进行编辑

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次。我该如何解决这个问题?

+1

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

编辑

  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); 
+0

我是否将while循环保留为相同?或者我将它更改为newLine = br.readLine()? – JSmithers

+0

虽然它似乎没有打印到文件。现在记录保持不变。 – JSmithers

+0

仍然没有打印:( – JSmithers