Java удалить строки в файле?

У меня есть текстовый файл, который будет содержать повторяющиеся строки следующей информации (без маркеров):

В каждом «наборе» номера будут разными, как и адрес электронной почты. Это всего лишь пример. Что я хочу сделать, так это просмотреть текстовый файл, уточнить строку с конкретным кодом, который я ищу, а затем удалить этот код, адрес электронной почты и строку с номером. Например, строка с кодом в ней, а также следующие две строки. Я не могу, на всю жизнь, понять, как это сделать. Я научился заменять эти строки чем-то другим, но я хотел бы полностью стереть их, желательно без необходимости каждый раз создавать новый текстовый файл, если только нет способа создать новый текстовый файл с удаленными строками, и замените старый файл этим новым. Вот соответствующий код, который у меня есть, в сегментах. Код заменяет все строки, соответствующие переменной oldLine, пустой строкой. Это не то, что я хочу, но я не могу понять это иначе. Я получил большую часть этого кода из примера в другом месте.

//Instantiating the File class
          String filePath = "C:\\\\Users\\\\taylo\\\\Astronomy\\\\Which Bright Stars Are Visible\\\\StoreVerificationCodes.txt";
          //Instantiating the Scanner class to read the file
          Scanner sc = new Scanner(new File(filePath));
          //instantiating the StringBuffer class
          StringBuffer buffer = new StringBuffer();
          //Reading lines of the file and appending them to StringBuffer
          while (sc.hasNextLine()) {
             buffer.append(sc.nextLine()+System.lineSeparator());
          }
          String fileContents = buffer.toString();
          System.out.println("Contents of the file: "+fileContents);
          //closing the Scanner object
          sc.close();
          String oldLine = "Code: 12345";
          String newLine = "";
          //Replacing the old line with new line
          fileContents = fileContents.replaceAll(oldLine, newLine);
          //instantiating the FileWriter class
          FileWriter writer = new FileWriter(filePath);
          System.out.println("");
          System.out.println("new data: "+fileContents);
          writer.append(fileContents);
          writer.flush();
          writer.close();

Запишите данные без строк в новый файл, после того, как вы закончите, удалите старый файл и переименуйте новый в имя старого файла.

daniu 25.12.2020 11:17

Отвечает ли это на ваш вопрос? Найдите строку в файле и удалите её

Simon van Endern 25.12.2020 11:21
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
255
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну, я думаю, то, что вы ищете, это substring метод. Я полагаю, что есть какая-то причина, по которой у вас есть это требование, когда у вас есть только код, и вы также должны удалить следующие две строки этого набора. Пожалуйста, взгляните на приведенный ниже код. Это должно работать, учитывая, что структура вашего файла фиксирована и не собирается меняться.

    String filePath = "C:/Users/taylo/Astronomy/Which Bright Stars Are Visible/StoreVerificationCodes.txt";
        //Instantiating the Scanner class to read the file
        Scanner sc = new Scanner(new File(filePath));
        //instantiating the StringBuffer class
        StringBuffer buffer = new StringBuffer();
        //Reading lines of the file and appending them to StringBuffer
        while (sc.hasNextLine()) {
           buffer.append(sc.nextLine()+System.lineSeparator());
        }
        String fileContents = buffer.toString();
        System.out.println("Contents of the file: "+fileContents);
        //closing the Scanner object
        sc.close();
        String oldLine = "Code: 789678";
        String newLine = "";
        
       // My changes starts here.............
        String codePattern = "Code:";   // A fixed pattern
        int firstIndex = fileContents.indexOf(oldLine); // To get the index of code you looking for.
       int nextIndex= fileContents.indexOf(codePattern, firstIndex+1);
        if (nextIndex != -1) {
            nextIndex = fileContents.indexOf(codePattern, firstIndex+1) -5;
            fileContents = fileContents.substring(0, firstIndex) + fileContents.substring(nextIndex+3);
        }
        else
            fileContents = fileContents.substring(0, firstIndex);
         // My changes done here.............
        //fileContents = fileContents.replaceAll(oldLine, newLine);  //No need
       
        FileWriter writer = new FileWriter(filePath);
        System.out.println("");
        System.out.println("new data: "+fileContents);
        writer.append(fileContents);
        writer.flush();
        writer.close();

Спасибо вам за помощь! Он отлично работает, но выбрасывает индекс строки за пределы диапазона, когда я пытаюсь выполнить последний код в списке, особенно в строке fileContents = fileContents.substring.....

MusicalUniverse 26.12.2020 03:47

Спасибо @MusicalUniverse. Тот случай я не тестировал. Обновил решение. необходимые дополнительные проверки, которые вы можете установить в любое время.

Nish 28.12.2020 18:32

Другие вопросы по теме