【发布时间】:2014-03-05 14:56:43
【问题描述】:
我在让这个函数工作时遇到了一些麻烦,所以在这里提供一点上下文。这就是一个按钮,用于从 3 个不同的文本文件中删除一行。它通过从主 GUI 中的文本字段中获取要删除的字符串来确定要删除的字符串,然后搜索相关文件以查找字符串。一旦找到字符串,它们就会被写入一个临时文件并刷新。
此代码确实有效,但仅适用于第一个文件。我对这段代码的唯一问题是最后的重命名由于某种原因不起作用?我需要将文件重命名为原始文件,这样我的软件的其余部分才能正常运行。
请问有人可以帮忙吗? :)
removeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
// TODO
String name = reminderNameField.getText();
String date = reminderDate.getText();
String details = reminderDetailsField.getText();
File fileName = new File("reminderNames.txt");
File fileDate = new File("reminderDate.txt");
File fileDetails = new File("reminderDetails.txt");
try {
File tempFileN = new File(fileName.getAbsoluteFile() + ".tmp");
File tempFileD = new File(fileDate.getAbsoluteFile() + ".tmp");
File tempFileC = new File(fileDetails.getAbsoluteFile() + ".tmp");
BufferedReader brName = new BufferedReader(new FileReader("reminderNames.txt"));
BufferedReader brDate = new BufferedReader(new FileReader("reminderDate.txt"));
BufferedReader brDetails = new BufferedReader(new FileReader("reminderDetails.txt"));
PrintWriter pwName = new PrintWriter(new FileWriter(tempFileN));
PrintWriter pwDate = new PrintWriter(new FileWriter(tempFileD));
PrintWriter pwDetails = new PrintWriter(new FileWriter(tempFileC));
String lineN = null;
String lineD = null;
String lineC = null;
while ((lineN = brName.readLine()) !=null && (lineD = brDate.readLine()) !=null && (lineC = brDetails.readLine()) !=null) {
if(!lineN.trim().equals(name) && !lineD.trim().equals(date) && !lineC.trim().equals(details)) {
pwName.println(lineN);
pwName.flush();
pwDate.println(lineD);
pwDate.flush();
pwDetails.println(lineC);
pwDetails.flush();
}
}
pwName.close();
pwDate.close();
pwDetails.close();
brName.close();
brDate.close();
brDetails.close();
fileName.delete();
fileDate.delete();
fileDetails.delete();
if(!tempFileN.renameTo(fileName)) {
System.out.println("Cannot rename file");
}
if(!tempFileD.renameTo(fileDate)) {
System.out.println("Cannot rename file date");
}
if(!tempFileC.renameTo(fileDetails)) {
System.out.println("Cannot rename file details");
}
* 更新 * 写了这个确实有效的方法,但是由于某种原因它只适用于一个文件?谁能告诉我为什么?
public void removeReminder(File a, String search) throws IOException {
File tempFile = new File(a.getAbsolutePath() + ".tmp");
BufferedReader br = new BufferedReader(new FileReader(a));
PrintWriter pw = new PrintWriter(new FileWriter(tempFile));
String line = null;
while ((line = br.readLine()) != null) {
if (!line.trim().equals(search)) {
pw.println(line);
pw.flush();
}
}
pw.close();
br.close();
a.delete();
tempFile.renameTo(a);
}
【问题讨论】:
-
我很困惑。为什么没有一个函数来一次处理一个文件并只遍历三个文件?
-
我开始认为这会容易得多,但是在尝试让它工作时遇到了很多麻烦?你会如何建议这样做?
-
为一个文件编写一个方法。确保首先有效。一旦这样做,很可能(a)你的问题会神奇地消失,或者(b)问题会神奇地变得明显。
-
感谢戴夫的帮助。想想我只是盯着一件到很长时间。我按照你说的做了,效果很好!非常感谢您的宝贵时间! :)
-
做太多的方法很难推理;分解问题通常会使它们更容易解决:) 很高兴你让它工作了。