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




Вам нужен 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. Прочтите первую строку в строке, затем примените изменение и запишите строку обратно.
«Файл может состоять из миллионов строк» - удачи с регулярными выражениями! ржу не могу
Если новая строка имеет другое количество символов (байтов), чем исходная первая строка, вам придется переписать весь файл, чтобы избавиться от пробела или избежать перезаписи части второй строки.
Конечно, с этой задачей могут помочь различные инструменты, такие как String.replaceFirst(String regex, String replacement) (javadoc) или RandomAccessFile (javadoc).
RandomAccessFile подойдет, если длина результирующей строки не отличается от длины исходной строки.
Если выясняется, что вы вынуждены выполнить копирование (где первая строка заменяется, а остальные данные копируются как есть), я предлагаю использовать BufferedReader и BufferedWriter. Сначала используйте BufferedReaderreadLine(), чтобы прочитать первую строку. Измените его и запишите на BufferedWriter. Затем используйте массив char[] для копирования оставшейся части файла методом перебора. Это будет более эффективно, чем копирование построчно. Дайте мне знать, если вам нужны подробности.
Другой вариант - выполнять чтение и запись внутри одного файла. Однако это будет немного сложнее. :) Дайте мне знать, если вам нужны подробности по этому поводу ..
Не могли бы вы предоставить некоторую информацию, если длина заменяемой строки отличается. Можно ли без копирования в новый файл
Если длина отличается, вам, по крайней мере, придется переписывать все байты либо в том же файле, либо в другом файле.
У кого-нибудь есть пример кода, как это сделать с помощью RandomAccessFile?
Почему бы не написать сценарий Perl и не вызывать его с помощью Runtime.exec (). Однако это не чистое java-решение. Также прочтите эту статью, прежде чем углубляться в детали http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
только если длина строки 1 не изменится