Заменить первую строку текстового файла в Java

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

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

Это возможно?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
9
0
27 316
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Вам нужен RandomAccesssFile. Используя файл, вы можете читать и писать в любом месте файла.

Это очень похоже на InputStream и OutputStream, но позволяет читать и писать где угодно.

применить регулярное выражение только один раз. String.replaceFirst («регулярное выражение», «строка замены»): http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#replaceFirst(java.lang.String,%20java.lang.String)

Откройте файл как RandomAccessFile. Прочтите первую строку в строке, затем примените изменение и запишите строку обратно.

только если длина строки 1 не изменится

Cheekysoft 14.10.2008 22:11

«Файл может состоять из миллионов строк» ​​- удачи с регулярными выражениями! ржу не могу

Vladimir Dyuzhev 15.10.2008 04:29

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

Конечно, с этой задачей могут помочь различные инструменты, такие как String.replaceFirst(String regex, String replacement) (javadoc) или RandomAccessFile (javadoc).

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

RandomAccessFile подойдет, если длина результирующей строки не отличается от длины исходной строки.

Если выясняется, что вы вынуждены выполнить копирование (где первая строка заменяется, а остальные данные копируются как есть), я предлагаю использовать BufferedReader и BufferedWriter. Сначала используйте BufferedReaderreadLine(), чтобы прочитать первую строку. Измените его и запишите на BufferedWriter. Затем используйте массив char[] для копирования оставшейся части файла методом перебора. Это будет более эффективно, чем копирование построчно. Дайте мне знать, если вам нужны подробности.

Другой вариант - выполнять чтение и запись внутри одного файла. Однако это будет немного сложнее. :) Дайте мне знать, если вам нужны подробности по этому поводу ..

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

png 22.05.2012 16:42

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

volley 10.09.2012 16:37

У кого-нибудь есть пример кода, как это сделать с помощью RandomAccessFile?

jymbo 12.01.2018 23:52

Почему бы не написать сценарий Perl и не вызывать его с помощью Runtime.exec (). Однако это не чистое java-решение. Также прочтите эту статью, прежде чем углубляться в детали http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

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