删除文本文件中的特定行

问题描述 投票:0回答:2

我有一个.txt文件。inventory.txt它包含

banana, 1, 15
dog, 1, 15
cats, 20, 30

我想创建一个方法来删除其中的一行,比如说删除了 cats 行,通过输入 catscats, 20, 30

我的代码提示用户 removedItem,改为 inventory.txt,修剪每一行,并检查是否 trimmedLine 等于 removedItem那么 continue 并写信给 deleteditems.txt 每一 line 删去 trimmedLine. 然后,我关闭两个 writerreader删掉原来的 inventory.txt,并改名为 deleteditems.txtinventory.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
java file text methods bufferedreader
2个回答
0
投票

你的做法有两个问题。

  • 你把整个行和输入的 "等价 "进行比较... 为了匹配,用户不可能只输入 "猫",他们需要输入 "猫,20,30",因为那是一个行所包含的内容。
  • 即使真的匹配了,你还是要把 "行 "写到输出文件中去。

你可以这样解决。

 while((line = reader.readLine()) != null) {
            String trimmedLine = line.trim();
            if(!trimmedLine.startsWith(removedLine)) {

               writer.write(line + 
                  System.getProperty("line.separator"));
            }
        }

只有在不以输入开始的情况下,才会写出这一行。

顺便说一下,你应该考虑一下是否使用 "用资源试试" 语句来打开你的 readerwriter,以确保即使在发生异常的情况下,事情也能得到正确的清理。


0
投票

你试图用.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());
© www.soinside.com 2019 - 2024. All rights reserved.