2016-02-26 53 views
2

我有以下代碼:查找在文本文件中的一行,並對其進行編輯

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

回答

2

編輯

  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

相關問題