Не могу найти символ новой строки в файле (Java) - PullRequest
3 голосов
/ 24 сентября 2011

Я пытаюсь получить последнюю строку файла, но мой вывод показывает, что он никогда не находит его. Я также пытался найти «[», с которого начинаются все строки, но если переходы не были совершенными, программа не пропустит «[». Я пытался найти "\ r \ n", System.getProperty ("line.separator"), \ r и \ n. Скорее всего, это глупая ошибка, но если она у меня есть и я не могу ее найти, то кто-то другой может столкнуться с ней.

        RandomAccessFile raf = new RandomAccessFile(fileLocation, "r");
        //Finds the end of the file, and takes a little more
        long lastSegment = raf.length() - 5;
        //**Looks for the new line character \n?**
        //if it cant find it then take 5 more and look again.
        while(stringBuffer.lastIndexOf("\n") == -1)  {
            lastSegment = lastSegment-5;
            raf.seek(lastSegment);
            //Not sure this is the best way to do it
            String seen = raf.readLine();
            stringBuffer.append(seen);
        }
        //Trying to debug it and understand
        int location = stringBuffer.lastIndexOf("\n");
        System.out.println(location);
        FileInputStream fis = new FileInputStream(fileLocation);
        InputStreamReader isr = new InputStreamReader(fis, "UTF8");
        BufferedReader br = new BufferedReader(isr);
        br.skip(lastSegment);
        System.out.println("br.readLine() " + br.readLine());
}

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

Файл, который я использую, это http://www.4shared.com/file/i4rXwEXz/file.html

Спасибо за помощь, и если вы видите какие-либо другие места, где мой код может быть улучшен, сообщите мне

1 Ответ

7 голосов
/ 24 сентября 2011

Это просто потому, что вы используете readline.Он возвращает вам строку String без символа новой строки, каким бы он ни был (CR / LF / CRLF).

Javadoc или RandomAccessFile # readLine () говорит:

Строка текста заканчивается символом возврата каретки ('\ r'), символом новой строки ('\ n'), символом возврата каретки, за которым сразу следует символ новой строки, или концомфайл.Символы конца строки отбрасываются и не включаются как часть возвращаемой строки.

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

...