Удалить определенную строку из текстового файла Java?

#java #file #text #file-io #io

#java #файл #текст #file-io #io

Вопрос:

Я хочу удалить определенную строку из текстового файла. Я нашел эту строку, но что делать дальше? Есть идея?

Ответ №1:

Прочитайте файл из потока и запишите его в другой поток и пропустите строку, которую вы хотите удалить

Ответ №2:

В удалении строк нет никакого волшебства.

  • Скопируйте файл построчно, без ненужной строки.
  • Удалите исходный файл.
  • переименуйте копию в исходный файл.

Комментарии:

1. Вы создаете новый файл путем записи в файл, который не существует. Вы можете добавить расширение типа .new для создания нового файла. Вы можете переименовать ее с помощью File.rename()

Ответ №3:

Попробуйте этот код.

 import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


class Solution {
    public static void main(String[] args) throws FileNotFoundException, IOException{

        File inputFile = new File("myFile.txt");
        File tempFile = new File("myTempFile.txt");

        BufferedReader reader = new BufferedReader(new FileReader(inputFile));
        BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile));

        String lineToRemove = "bbb";
        String currentLine;

        while((currentLine = reader.readLine()) != null) {
            // trim newline when comparing with lineToRemove
            String trimmedLine = currentLine.trim();
            if(trimmedLine.equals(lineToRemove)) continue;
            writer.write(currentLine   System.getProperty("line.separator"));
        }
        writer.close(); 
        reader.close(); 
        boolean successful = tempFile.renameTo(inputFile);
        System.out.println(successful);

    }
}
  

Ответ №4:

Попробуйте прочитать файл:

  public static String readAllText(String filename) throws Exception {
    StringBuilder sb = new StringBuilder();
    Files.lines(Paths.get(filename)).forEach(sb::append);
    return sb.toString();
}
  

затем разделить текст из определенного символа (для новой строки » n»)

 private String changeFile(){
String file = readAllText("file1.txt"); 
String[] arr = file.split("n"); // every arr items is a line now.
StringBuilder sb = new StringBuilder();
for(String s : arr)
{
   if(s.contains("characterfromlinewillbedeleted"))
   continue;
   sb.append(s); //If you want to split with new lines you can use sb.append(s   "n");
}
return sb.toString(); //new file that does not contains that lines.
}
  

затем запишите строку этого файла в новый файл с:

 public static void writeAllText(String text, String fileout) {
    try {
        PrintWriter pw = new PrintWriter(fileout);
        pw.print(text);
        pw.close();
    } catch (Exception e) {
        //handle exception here
    }
}


writeAllText(changeFile(),"newfilename.txt");
  

Комментарии:

1. Вам следует изменить здесь «characterfromlinewillbedeleted» на то, какие строки будут удалены у вас.

Ответ №5:

Удаление текстовой строки непосредственно из файла невозможно. Мы должны прочитать файл в память, удалить текстовую строку и переписать отредактированное содержимое.

Комментарии:

1. Хотя, конечно, необязательно, чтобы весь файл помещался в память, поскольку вы можете читать и записывать в одном цикле.

2. @Simon — согласен — нам не обязательно хранить весь файл в памяти, но в конце каждый отдельный байт файла был прочитан, помещен в буфер где-нибудь в оперативной памяти и записан в новый целевой файл.

Ответ №6:

Возможно, метод поиска будет делать то, что вы хотите, т.Е. метод «search» принимает строку в качестве параметра и выполняет поиск по ней в файле и заменяет строку, содержащую эту строку.

PS:

 public static void search (String s)
{
    String buffer = "";
    try {

        Scanner scan = new Scanner (new File ("filename.txt"));
        while (scan.hasNext())
        {
            buffer = scan.nextLine();

            String [] splittedLine = buffer.split(" ");
            if (splittedLine[0].equals(s))
            {

                buffer = "";

            }
            else
            {
                //print some message that tells you that the string not found


            }
        }
        scan.close();

    } catch (FileNotFoundException e) {
        System.out.println("An error occured while searching in file!");
    }

}