Удалить указанную c строку в текстовом файле - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть файл .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

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

вы пытаетесь проверить точное совпадение с помощью .equals ()

попробуйте использовать .contains (CharSequence) или .startsWith ()

        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());
0 голосов
/ 24 апреля 2020

Есть две проблемы с тем, что вы делаете:

  • вы сравниваете всю строку со входом с "равно" .... для того, чтобы соответствовать, пользователь не мог не просто введите «кошки», им нужно будет ввести «кошки, 20, 30», так как это то, что содержит строка.
  • , даже если она совпадает, вы все равно пишете «строку» в выходной файл

Вы можете исправить это так:

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

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

Эта строка будет записана только в том случае, если она не начинается с ввода.

Как примечание: вы должны использовать оператор "try with resources" , чтобы открыть свое устройство чтения / записи, чтобы обеспечить правильную очистку даже в случае исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...