我有以下代碼:查找在文本文件中的一行,並對其進行編輯
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中設計的測試來測試替換方法。 – ControlAltDel