java - прочитать последние 2 строки в файле и удалить последнюю строку, затем добавить 2 фиксированных строковых значения в конец файла - PullRequest
1 голос
/ 07 октября 2011

Я хочу прочитать последние 2 строки в некоторых файлах, и если содержимое второй последней строки совпадает с определенной строкой, то удалить только последнюю строку.

Кроме того, после вышеуказанной операции, 2 строки данных должны быть добавлены в конец измененного файла. Я видел другие вопросы по SO, которые касаются различных частей моей проблемы, но есть ли простой способ сделать все вышеперечисленное с минимальным кодом, предпочтительно в одной функции? (Я могу комбинировать различные функции, доступные в SO, но это было бы грязно ...)

Ответы [ 3 ]

2 голосов
/ 07 октября 2011

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


Пример:

public static void main(String[] args) throws IOException {

    String fileName = "test.txt";

    List<String> lines = new ArrayList<String>();

    // read the file into lines
    BufferedReader r = new BufferedReader(new FileReader(fileName));
    String in;
    while ((in = r.readLine()) != null)
        lines.add(in);
    r.close();

    // check your condition
    String secondFromBottom = lines.get(lines.size() - 2);
    if (secondFromBottom.matches("Hello World!")) {
        lines.remove(lines.size() - 1);
        lines.add("My fixed string");
    }  

    // write it back
    PrintWriter w = new PrintWriter(new FileWriter(fileName));
    for (String line : lines)
        w.println(line);
    w.close();
}

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

0 голосов
/ 02 октября 2012

Как сказал Гэндальф, вы можете:

  • взять RandomAccessFile,
  • использовать метод seek (long) , чтобы перейти вперед и прочитать эти строки.Но вы не будете точно знать, насколько большим должен быть скачок.
  • , чтобы удалить последние строки, вам нужна позиция начала последней строки, поэтому перед чтением каждой строки сохраните позицию указателя файла (метод getFilePointer () ).Для удаления на эту позицию вы используете setLength (long) .

Мой пример чтения и удаления последних строк, которые вы здесь видите: Удаление последней строки файла с Java

Полезно также: Быстро прочитать последнюю строку текстового файла?

0 голосов
/ 07 октября 2011

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

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