Перейти к содержимому

Как удалить строку из файла java

  • автор:

Как удалить строку из файла java

Чтобы удалить строку из файла в Java , вы можете использовать следующий подход:

  1. Создайте новый временный файл.
  2. Прочтите исходный файл построчно, пропуская строки, которые вы хотите удалить.
  3. Записывайте прочитанные строки во временный файл.
  4. Удалите исходный файл.
  5. Переименуйте временный файл в исходное имя файла.
import java.io.*; public class RemoveLineFromFile  public static void main(String[] args)  // имя файла String fileName = "example.txt"; // строка, которую нужно удалить String lineToRemove = "delete me"; try  // создаем временный файл File tempFile = new File("temp.txt"); BufferedWriter writer = new BufferedWriter(new FileWriter(tempFile)); // читаем исходный файл BufferedReader reader = new BufferedReader(new FileReader(fileName)); String currentLine; while ((currentLine = reader.readLine()) != null)  // если текущая строка не равна удаляемой // записываем ее во временный файл if (!currentLine.equals(lineToRemove))  writer.write(currentLine + System.getProperty("line.separator")); > > // закрываем ридер и писатель reader.close(); writer.close(); // удаляем исходный файл File oldFile = new File(fileName); oldFile.delete(); // переименовываем временный файл в исходное имя файла tempFile.renameTo(oldFile); System.out.println("Строка " + lineToRemove + " удалена из файла " + fileName); > catch (IOException ex)  System.out.println("Ошибка при удалении строки из файла " + fileName); ex.printStackTrace(); > > > 

Этот код удалит все строки с текстом «delete me» из файла «example.txt»

Как удалить определенную строку из файла?

abler98

Хм, а что это за оператор «finally»? Это тоже нужно во избежание ошибки?

abler98

Сергей Семенко @abler98 Автор вопроса

Кстати, достаточно было просто вставлять перенос после каждой строки.

Сергей Семенко: finally секция срабатывает в любом случае, когда был exception или когда его не было. Следовательно в нем закрываются reader и writer, потому что если написать эти строчки в конце try, а программа вылетит с exception, то reader и writer не будут закрыты.

abler98

Сергей Семенко @abler98 Автор вопроса

Удаление строки из текстового файла в программе на java swing

Есть у меня программа типа словаря, в которой есть кнопка удалить. Задача такая, мне нужно найти строку в текстовом файле, и удалить её. Находить, я нахожу, но вот удалять строку я не научился. Пробовал такой вот метод

private void DeleteActionPerformed(java.awt.event.ActionEvent evt) < String filePath = "Dictio.txt"; String outputLine = jTextField3.getText(); String line=null; jTextField3.setText(" "); try < BufferedReader reader = new BufferedReader(new FileReader(new File("Dictio.txt"))); BufferedWriter out1 = new BufferedWriter(new FileWriter(new File("Dictio.txt"))); while((line = reader.readLine()) != null)< if(line.contains(outputLine))< out1.newLine(); out1.write(""); out1.close(); >> // закрываем > catch (Exception e) < System.err.println("Error in file cleaning: " + e.getMessage()); >> 

Но получается пока удалять все содержимое из файла, а надо только заранее найденную строку.
Отслеживать
56k 10 10 золотых знаков 83 83 серебряных знака 136 136 бронзовых знаков
задан 20 мая 2016 в 16:32
45 1 1 серебряный знак 5 5 бронзовых знаков

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

В приведённом Вами коде присутствует сразу несколько грубейших ошибок:

  • Вы записываете данные сразу в тот же файл из которого их только что прочитали;
  • Вы записываете в файл пустую строку;
  • После записи первой строки Вы сразу же закрываете файл.

В итоге получается описанный Вами результат.

Чтобы этого не было:

  1. Создаём две файловые переменные. File sourceFile = new File(«Dictio.txt»); File outputFile = new File(«Dictio2.txt»);
  2. Записываем в новый файл все данные, кроме удаляемой строки. BufferedReader reader = new BufferedReader(new FileReader(sourceFile)); BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile)); while ((line = reader.readLine()) != null) < if (!line.equals(outputLine)) < writer.write(line); writer.newLine(); >>
  3. Затем удаляем исходный файл, а получившийся файл переименовываем. reader.close(); writer.close(); sourceFile.delete(); outputFile.renameTo(sourceFile);

P.S.

В данной ситуации, ИМХО, более рациональным решением было бы прочитать файл в строковый массив, а затем удалить в нём нужную строку и перезаписать исходный файл с новыми данными.

Отслеживать
ответ дан 20 мая 2016 в 17:35
11.7k 9 9 золотых знаков 28 28 серебряных знаков 40 40 бронзовых знаков
Тут есть какая то ошибка. Срабатывает IOException.
20 мая 2016 в 18:46

Ошибок нет. Алгоритм рабочий. Судя по всему, что-то сделали не так. Просто, нужно хотя бы немного разобраться, а не копировать в свой проект «в лоб». Без обид. Выкладывайте код, как пытались применить решение из ответа, и stack trace исключения. Комментарии из категории «у меня не получается и всё» здесь не прокатывают.

20 мая 2016 в 21:00

Как вставлять код в комментарии я не знаю (F.A.Q. показанный внизу я не понял). Но делал примерно так, сначала задал outputLine так, как задал его в своем первоначальном варианте. Затем объявил переменную таким образом- String line; . Потом объявил два файла как указанно у вас в примере. Основную часть с записью в файл кроме удаляемой строки я окружил try/catch. И в этом же блоке перед самым catch задал удаление исходного и переименовывание нового файла. И исключение выглядит так java.io.IOException: Stream closed

Как удалить пустую строку java

Удалить пустую строку можно разными способами. Рассмотрим 2 из них :

import java.util.Arrays; import java.util.stream.Collectors; public class App  public static void main(String[] args)  String str = "This is a string\n \nwith empty lines"; System.out.println(str); // => This is a string // => // => with empty lines // способ 1 String newStr = str.replaceAll("(?m)^\\s*$[\r\n]+", ""); System.out.println(newStr); // => This is a string // => with empty lines // способ 2 newStr = Arrays.stream(str.split("\n")) .filter(x -> x.trim().length() != 0) .collect(Collectors.joining("\n")); System.out.println(newStr); // => This is a string // => with empty lines > > 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *