Java удалить строку из файла
Обновлено: 21.11.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, поэтому вы можете оставить его просачиваться наружу. Конечный результат будет одинаковым в любом случае.
Я попробовал применить свои предложения к существующему коду. Конечный результат (непроверенный) выглядит так:
Читайте также: