查找在文本文件中的一行,并对其进行编辑
问题描述:
我有以下代码:查找在文本文件中的一行,并对其进行编辑
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次。我该如何解决这个问题?
答
编辑
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);
我相信你会从别人那里找到一些很好的解决方案。我只是想添加一条评论来说,当文件的大小没有对内存造成限制时,可以先将整个文件加载到一个字符串中,然后创建一个修改过的字符串,然后将其序列化回磁盘。这样做的好处是您可以通过自己的代码或通过JUnit中设计的测试来测试替换方法。 – ControlAltDel