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

Обновлено: 18.05.2024

Привет, мне очень интересен метод, который может удалить строку из текстового файла на основе "идентификационного номера", но я не знаю, как этого добиться.

Мне нужно заменить некоторую строку из текстового файла, например, "upcoming:event=123982". Строки всегда начинаются с «предстоящее: событие \r\n»; и посмотрите, работает ли это. Еще лучше было бы придумать регулярное выражение, которое соответствовало бы .

FileReader frStream = new FileReader("alpha.txt"); BufferedReader brStream = новый BufferedReader( frStream ); FileWriter fwStream = новый FileWriter ("a.txt"); BufferedWriter bwStream = новый BufferedWriter(fwStream); FileWriter fwStream2 = новый FileWriter("b.txt"); BufferedWriter bwStream2 = новый BufferedWriter (fwStream2); Строка aString = brStream.readLine(); while (aString != null) < if (aString=='a')< bwStream.write(aString); bwStream.newLine(); >иначе если(aString == 'b' ) .

Здравствуйте, у меня есть текстовый файл, содержащий много строк, каждая строка содержит имя и адрес электронной почты, поэтому я хочу написать программу, которая удаляет все имена, но оставляет адреса как есть. Проблема в том, что моя программа удаляет все в файле. В среде NetBeans он выглядит следующим образом: public .

Хорошо, поэтому я делаю программу, в которой мне нужно удалить одно слово из файла .txt с помощью кнопки и текстового поля (Swing). Но проблема в том, что я понятия не имею, как удалить одну строку/слово из файла .txt, который использует моя программа. Основная идея того, что я делаю: [Добавить имя] (Митчелл) [Удалить имя] (Кайл) .

У меня возникла проблема с удалением людей из списка, для этого я пытался создать массив для каждой строки в файле, затем удалить файл и переделать его, исключая имя, которое было удалено. Но происходит то, что файл либо вообще не удаляется, либо переделывается с теми же строками, что и .

OP, вам бы помогло, если бы вы только что поэкспериментировали с рассматриваемой строкой. Я знаю, что в вашей теме написано «Удаление символов из текстового файла», но я предлагаю пойти проще. особенно если вы не понимаете идеи, намеки и указатели, уже данные вам. Проще было бы удалить символы из любой строки, тогда вы можете удалить их из .

Всем привет, я работаю над программой, позволяющей удалять определенные скобки из текстового файла. Текстовый файл содержит определенные логические формулы с большим количеством скобок и круглых скобок, некоторые из которых я хотел бы удалить. Ниже приведен пример информации в текстовом файле: ( (O(pay)) ^ )) Теперь рассмотрим выше.

Думаю, я бы попробовал: 1. переименовать $file в $file.orig // не получится заранее, если $file нельзя изменить, например $file открыть в другом месте 2. скопировать $file.orig в $file опуская ненужные строки 3. удаляйте $file.orig только если все хорошо. Это называется пессимистическим программированием. Общий принцип: если это может потерпеть неудачу, сделайте так, чтобы она потерпела неудачу раньше, прежде чем она что-то сделает. что-то необратимое, например удаление .

Кажется, это работает правильно, поскольку из истории удаляются соответствующие слова. Тем не менее, я хотел бы сохранить историю в порядке, как это было до каких-либо манипуляций (просто с удаленными словами). В настоящее время мне представлен столбец слов с кажущимся случайным порядком слов. Спасибо.

Привет, это мой первый пост. Я пытаюсь удалить повторяющиеся строки из текстового файла. Чтобы усложнить ситуацию, строки содержат не уникальные временные метки, а уникальный ссылочный номер. Некоторые из дубликатов составляют 10 строк, тогда как другие могут быть только 2 строками. 1. Вот несколько примеров повторяющихся строк: , , 08:47:22,95847170050,Проблема ввода данных. 08:53:28, .

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

Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован не так, как показано ниже. Для просмотра откройте файл в редакторе, который показывает скрытые символы Unicode. Подробнее о двунаправленных символах Юникода

import java .io.BufferedReader ;
импорт java.io.BufferedWriter ;
импорт java.io.File ;
импорт java.io.FileReader ;
импорт java.io.FileWriter ;
импорт java.io.IOException ;
импорт java.util.ArrayList ;
импорт java.util. List ;
общедоступный класс LineNumberRemover
public static void main ( String . arguments ) выдает IOException
if (аргументы . длина 1 )
System . вне . println(" Укажите путь к файлу, чтобы " +
" удалить номера строк из аргументов командной строки." );
return ;
>
List String > new_lines = readAndRemove(arguments[ 0 ]);
writeNewFile(new_lines, arguments[ 0 ]);
>
private static List String > readAndRemove ( String file_path ) выдает IOException
BufferedReader reader = new BufferedReader ( new FileReader (file_path));< /td>
Строка списка> new_lines = новая строка ArrayList> ();
попробовать
for ( int i = 1 ; i Integer . MAX_VALUE ; i ++ )
String line = reader .readLine();
if (строка != null )
if (строка . содержит( String .valueOf(i)))
String new_line = line .substring(line .indexOf ( String . valueOf(i)) + String . valueOf(i) . length());
new_lines .add(new_line);
>
> else
break ;
>
>
> наконец
читатель. close();
>
return new_lines;
>
private static void writeNewFile (строка списка > new_lines, строка old_file_path) выдает исключение IOException
File new_file = new File (old_file_path + ". новый " );
новый_файл . createNewFile();
BufferedWriter Writer = new BufferedWriter ( new FileWriter (new_file));
try
for ( String line : new_lines)
writer . write(line + " \n " );
>
> finally
писатель. close();
>
>
>< /td>

Вы не можете выполнить это действие в данный момент.

Вы вошли в другую вкладку или окно. Перезагрузите, чтобы обновить сеанс. Вы вышли на другой вкладке или в другом окне. Перезагрузите, чтобы обновить сеанс.

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

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

Это должно быть реализовано в виде подпрограммы, которая принимает три параметра (имя файла, начальную строку и количество удаляемых строк).

Для целей этой задачи номера строк и количество строк начинаются с единицы, поэтому для удаления первых двух строк из файла foobar.txt параметры должны быть следующими: foobar.txt, 1, 2

Пустые строки учитываются и все равно должны учитываться, а если указанная строка пуста, ее все равно следует удалить.

При попытке удалить строки за концом файла должно появиться соответствующее сообщение.

Содержание

11l [ изменить ]

Ада [ изменить ]

АЛГОЛ 68 [править]

Удивительный прыгун [ изменить ]

Программирование с помощью макро-бункера:

Автогорячая клавиша [ изменить ]

с test.txt, начинающимся с

Запуск кода, который есть сейчас

АВК [ изменить ]

ОСНОВНЫЕ [изменить]

Совместимость с VB-DOS, QBasic, QuickBASIC 4.5, PDS 7.1, QB64

Подробный и с программным циклом для проверки процедур.

IS-BASIC [ изменить ]

C [ изменить ]

С++ [править]

Clojure [править]

Простое решение для большинства строк в памяти.

Более сложное решение для больших файлов, по одной строке за раз.

Common Lisp [править]

D [ изменить ]

Дельфи [ изменить ]

Использование TStringDynArray [ изменить ]

Использование TStringList [ изменить ]

ECL [ изменить ]

Реализовано для логических файлов HPCC, а не для отдельных физических файлов, поскольку все наборы данных в HPCC распределены.

И простой тест для запуска:

Эликсир [ изменить ]

Эрланг [ изменить ]

С "foobar.txt" это выглядит так:

Фортран [править]

Правильный подход заключается в том, чтобы скопировать исходный файл в выходной файл с изменениями, внесенными по пути, а затем, когда все пойдет хорошо, удалить (или лучше переименовать) исходный файл и изменить имя выходного файла, чтобы стать исходным именем. В противном случае существует риск потери данных. Это жонглирование именами, конечно, провоцирует коллизии. С Фортраном проблем нет, потому что язык не предоставляет механизма для изменения имен файлов. Однако резервный метод заключается в копировании файла во временный файл (с изменениями по пути), а затем перезаписывании исходного файла из временного файла. Это может привести к сбою в течение интервала, когда версии исходного файла не существует, поэтому можно также сделать копию оригинала, помня, что имена файлов не могут быть изменены.

Как всегда, есть проблема с длиной куска строки. Допуск здесь составляет 66666 символов.Некоторые файловые системы знают длину записей и могут сделать максимальную длину записи доступной для запроса, но другие не знают и вместо этого используют маркер, который может быть CR, CRLF, LF или LFCR и даже смесью в одном и том же файле. Программа на Фортране не видит этого при ФОРМАТИРОВАННОМ вводе, только содержимое записи, стиль символов. Вывод в системе Windows/DOS всегда завершает записи с помощью CRLF. Нулевая запись будет после первого CRLF в последовательности CRLFCRLF и так далее. При использовании UNFORMATTED программа должна принимать собственные решения.

При запуске файла foobar.txt, содержащего

Результатом является файл foobar.txt, содержащий

А если запустить заново, то файл невредим и на экран выводится:


Формулировать сообщения об ошибках утомительно из-за отсутствия такой функции, как IFMT(n) для использования в CALL CROAK("Первая запись должна быть положительной, а не "//IFMT(IST))". завершенная программа будет беспокоиться о нехватке места на диске (что сигнализируется использованием опции END=label в операторе WRITE) и ошибках ввода-вывода с использованием ERR=label< /i>, но трудно разработать схемы восстановления для непредвиденных ошибок. Точно так же операторы OPEN рискуют столкнуться с файлом, который доступен для ЧТЕНИЯ, но не для ЗАПИСИ. Это помогло бы организовать все это, если бы OPEN(. ) была функцией, но вместо этого можно обратиться к непонятным кодам ошибок IOSTAT, возможно, с помощью, как в случае

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

Я изучаю Java. Можете ли вы покритиковать мой код и сказать, что мне нужно сделать, чтобы сделать его лучше?

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

id productName цена количество

Мы запускаем код с помощью:

-u id productName, цена, количество — обновить строку;

-d id - удалить строку.

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

Последняя важная вещь: каждый элемент в текстовой базе имеет собственный вес. Это int []argsLength . Если размер элемента меньше его веса, мы заполняем пустое пространство пробелами.

просто для теста(отступы правильные):

FileCreatorFactory:

Создатель файла:

удаление идентификатора:

IDUpdater:



2 ответа 2

Классы в Java начинаются с заглавной буквы. Не рекомендуется использовать аббревиатуры с несколькими заглавными буквами, поскольку их трудно читать. Предпочитайте Crud CRUD и IdUpdater idUpdater .

Вы всегда должны закрывать открытые программы чтения. Предпочтительный способ сделать это — использовать блок try-with-resources. В старой школе используется конструкция try-finally.

Продукт кажется вещью верхнего уровня, которая, возможно, должна быть представлена ​​объектом, а не String[] . Эта проблема настолько мала, что создание объекта может оказаться излишним, но она упрощает задачу.

Идея иметь отдельные действия, которые инкапсулируют удаление и обновление, разумна, но над реализацией может потребоваться некоторая работа, поскольку родительский класс имеет несколько концепций, которые применимы только к одному или другому. Вы можете пройти долгий путь с помощью простого интерфейса с одним методом, поскольку большая часть кода действительно используется двумя операциями. Единственная разница заключается в том, что вы делаете, когда находите совпадающую строку. Все остальное дублируется.

Не используйте общедоступный класс с закрытым для пакета конструктором, если в этом нет необходимости. Вы также можете сделать класс пакетно-приватным.

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

На самом деле вы вообще не обрабатываете IOException, поэтому вы можете оставить его просачиваться наружу. Конечный результат будет одинаковым в любом случае.

Я попробовал применить свои предложения к существующему коду. Конечный результат (непроверенный) выглядит так:

Читайте также: