Заменить первую строку текстового файла в Java - PullRequest
9 голосов
/ 14 октября 2008

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

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

Возможно ли это?

Ответы [ 5 ]

16 голосов
/ 14 октября 2008

A <a href="http://java.sun.com/javase/6/docs/api/java/io/RandomAccessFile.html" rel="noreferrer">RandomAccessFile</a> сделает свое дело, если только длина результирующей строки не отличается от длины исходной линии.

Если окажется, что вы вынуждены выполнить копирование (если первая строка заменена, а остальные данные должны быть скопированы как есть), я предлагаю использовать <a href="http://java.sun.com/javase/6/docs/api/java/io/BufferedReader.html" rel="noreferrer">BufferedReader</a> и <a href="http://java.sun.com/javase/6/docs/api/java/io/BufferedWriter.html" rel="noreferrer">BufferedWriter</a>. Сначала используйте BufferedReader s readLine(), чтобы прочитать первую строку. Измените его и запишите в BufferedWriter. Затем используйте массив char[], чтобы выполнить грубую копию оставшейся части файла. Это будет более эффективно, чем копирование построчно. Дайте мне знать, если вам нужны подробности ..

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

4 голосов
/ 14 октября 2008

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

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

2 голосов
/ 14 октября 2008

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

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

1 голос
/ 14 октября 2008

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

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

0 голосов
/ 15 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...