Почему первая строка файловой заметки читается с помощью BufferedReader? - PullRequest
1 голос
/ 02 мая 2011

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

Что происходит?

Вот источник:


    private void loadFile(String fileNPath)
    {
        StringBuilder currentFileContents = new StringBuilder();
        CharBuffer contentsBuffer = CharBuffer.allocate(65536);

        int status=0;
        try
        {
            BufferedReader in = new BufferedReader(new FileReader(fileNPath));

            while(status!=-1)
            {
                status=in.read(contentsBuffer);
                currentFileContents.append(contentsBuffer);
                contentsBuffer.clear();
            }

            System.out.println(currentFileContents.toString());
        }
        catch(FileNotFoundException n)
        {
            //Should be imposible
        }
        catch(IOException n)
        {
            n.printStackTrace(System.out);
        }

    }

Это должно быть что-то, на что я смотрю.

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

Спасибо, caalip

Ответы [ 3 ]

3 голосов
/ 02 мая 2011

Есть ли конкретная причина, по которой вы читаете файл таким, какой вы есть?

Вы используете методы родительского класса (например, BufferedReader не имеет метода read(CharBuffer)), а также ... само по себе CharBuffer немного излишне.Я подозреваю, что настоящая проблема в том, что вы не используете это правильно (обычно вы переворачиваете и истощаете объекты Buffer, но мне нужно было бы подсовывать больше, чтобы увидеть, как это в итоге манипулирует им)чтобы прочитать файл:

StringBuilder currentFileContents = new StringBuilder();
try
{
    BufferedReader in = new BufferedReader(new FileReader(fileNPath));
    String line = null;
    while( (line = in.readline()) != null )
    {
        currentFileContents.append(line);
    }

    System.out.println(currentFileContents.toString());
}
catch(FileNotFoundException n)
{
    //Should be imposible
}
catch(IOException n)
{
    n.printStackTrace(System.out);
}
1 голос
/ 02 мая 2011

Это кажется немного странным. Попробуйте изменить свой пробный блок на:

try
    {
        BufferedReader in = new BufferedReader(new FileReader(fileNPath));

        status=in.read(contentsBuffer.array(), 0, 65536);
        currentFileContents.append(contentsBuffer);

        System.out.println(currentFileContents.toString());
    }

Я не запускал этот код, но попробую.

ОБНОВЛЕНИЕ: Я запустил ваш код и столкнулся с проблемой, которую вы описали. Я запустил код с моей ревизией, и она работает.

0 голосов
/ 02 мая 2011

Я бы использовал FileUtils. readFileToString (файл), который делает это в одну строку.

Однако, когда я запускаю ваш код в текстовом файле, я вижукаждая строкаЯ подозреваю, что проблема не в вашем коде.

...