У меня есть следующий код:найти строку в текстовый файл и редактировать его
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