我有一个.txt文件。inventory.txt
它包含
banana, 1, 15
dog, 1, 15
cats, 20, 30
我想创建一个方法来删除其中的一行,比如说删除了 cats
行,通过输入 cats
或 cats, 20, 30
我的代码提示用户 removedItem
,改为 inventory.txt
,修剪每一行,并检查是否 trimmedLine
等于 removedItem
那么 continue
并写信给 deleteditems.txt
每一 line
删去 trimmedLine
. 然后,我关闭两个 writer
和 reader
删掉原来的 inventory.txt
,并改名为 deleteditems.txt
到 inventory.txt
. 但是,它什么都不做,编译后这一行仍然存在。
代码。
public void removeItems() throws IOException {
String line;
File inventory = new File("src/inventory.txt");
File temp = new File("src/deleteditems.txt");
BufferedReader reader = new BufferedReader(new FileReader("src/inventory.txt"));
BufferedWriter writer = new BufferedWriter(new FileWriter("src/deleteditems.txt"));
displayInventory();
temp.createNewFile();
System.out.println("what item do you want to remove");
String removedLine = scan.next();
while((line = reader.readLine()) != null) {
String trimmedLine = line.trim();
if(trimmedLine.equals(removedLine)) {
trimmedLine = "";
}
writer.write(line + System.getProperty("line.separator"));
}
reader.close();
writer.close();
inventory.delete();
temp.renameTo(inventory);
}
输出:
banana, 1, 15
dog, 1, 15
cats, 20, 30
what item do you want to remove
cats, 20, 30
编译后的文本文件。
banana, 1, 15
dog, 1, 15
cats, 20, 30
你的做法有两个问题。
你可以这样解决。
while((line = reader.readLine()) != null) {
String trimmedLine = line.trim();
if(!trimmedLine.startsWith(removedLine)) {
writer.write(line +
System.getProperty("line.separator"));
}
}
只有在不以输入开始的情况下,才会写出这一行。
顺便说一下,你应该考虑一下是否使用 "用资源试试" 语句来打开你的 readerwriter,以确保即使在发生异常的情况下,事情也能得到正确的清理。
你试图用.equals()来检查是否完全匹配。
尝试使用.contains(CharSequence)或.startWith()
String newInventory = "";
while((line = reader.readLine()) != null) {
String trimmedLine = line.trim();
if(!trimmedLine.contains(removedLine)) {
writer.write(line + System.getProperty("line.separator"));
continue;
}
newInventory += line;
}
FileOutputStream fout = new FileOutputSteam("src/inventory.txt");
fout.write(newInventory.getBytes());