这是我目前的代码:
import java.util.*;
import java.io.*;
public class Adding_Deleting_Car extends Admin_Menu {
public void delCar() throws IOException{
Scanner in = new Scanner(System.in);
File inputFile = new File("inventory.txt");
File tempFile = new File("myTemp.txt");
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
String currentLine;
String lineToRemove;
System.out.println("Enter the VIN of the car you wish to delete/update: ");
lineToRemove = in.next();
while((currentLine = reader.readLine()) != null) {
String trimmedLine = currentLine.trim();
if(trimmedLine.equals(lineToRemove)) continue;
System.out.println(trimmedLine);
writer.write((currentLine) + System.getProperty("line.separator"));
}
writer.close();
reader.close();
boolean successful = tempFile.renameTo(inputFile);
System.out.println(successful);
}
}
我想根据用户输入从文件中删除某一行文本。例如,这是我的文本文件:
AB234KXAZ;Honda;Accord;1999;10000;3000;G
AB234KL34;Honda;Civic;2009;15000;4000;R
CD555SA72;Toyota;Camry;2010;11000;7000;S
FF2HHKL94;BMW;535i;2011;12000;9000;W
XX55JKA31;Ford;F150;2015;50000;5000;B
我希望用户输入他们选择的字符串,这将是列中的第一个字段(例如XX55JKA31),然后从文件中删除该行文本。我在网上找到了一些代码,但我一直无法成功使用它。
我当前的代码似乎只是重写临时文本文件中的所有内容,但不会删除它。
答案 0 :(得分:1)
您正在使用File.renameTo,此处记录了: https://docs.oracle.com/javase/8/docs/api/java/io/File.html#renameTo-java.io.File-
根据文档,如果文件已经存在,它可能会失败,你应该使用Files.move。
以下是与Files.move相同的代码:
boolean successful;
try {
Files.move(tempFile.toPath(), inputFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
successful = true;
} catch(IOException e) {
successful = false;
}
注意:强> 您搜索VIN的代码也是错误的。请参阅Jure Kolenko关于该问题的一种可能解决方案的答案。
继续前进,您应该考虑使用实际数据库来存储和操作此类信息。
答案 1 :(得分:0)
您的错误在于
if(trimmedLine.equals(lineToRemove)) continue;
它将整行与您要删除的VIN进行比较,而不仅仅是第一部分。将其改为
if(trimmedLine.startsWith(lineToRemove)) continue;
它有效。如果您想要与其他列进行比较,请改用String::contains。也像Patrick Parker所说,使用Files.move而不是File :: renameTo修复了重命名问题。
完整的固定代码:
import java.util.*;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
public class Adding_Deleting_Car{
public static void main(String... args) throws IOException{
Scanner in = new Scanner(System.in);
File inputFile = new File("inventory.txt");
File tempFile = new File("myTemp.txt");
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));
String currentLine;
String lineToRemove;
System.out.println("Enter the VIN of the car you wish to delete/update: ");
lineToRemove = in.next();
while((currentLine = reader.readLine()) != null) {
String trimmedLine = currentLine.trim();
if(trimmedLine.startsWith(lineToRemove)) continue;
System.out.println(trimmedLine);
writer.write((currentLine) + System.getProperty("line.separator"));
}
writer.close();
reader.close();
Files.move(tempFile.toPath(), inputFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
}
请注意,我将类定义更改为不继承,将方法定义更改为main(String ... args),因此我可以在我的系统上进行编译。