【发布时间】:2016-06-10 02:52:29
【问题描述】:
我有以下代码:
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 中设计的测试等来测试您的替换方法。
标签: java rename file-writing