Чтение из файла.Какой подход лучше и почему? - PullRequest
0 голосов
/ 24 января 2012
BufferedReader buf2=new BufferedReader(
    new InputStreamReader(new FileInputStream("D:/info.txt")));

Из этих двух методов чтения содержимого файла какой метод лучше и почему?

BufferedReader buf=new BufferedReader(new FileReader("D:/info.txt"));

Ответы [ 4 ]

3 голосов
/ 24 января 2012

Обе строки эквивалентны;в обоих случаях вы получите BufferedReader, который позволит вам читать текст из файла.

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

BufferedReader buf2 = new BufferedReader(new InputStreamReader(
    new FileInputStream("D:/info.txt"), "UTF-8"));

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

1 голос
/ 24 января 2012

Считыватели предназначены для текстового ввода-вывода, а потоки - для двоичного ввода-вывода.Вы должны позаботиться о проблеме кодирования / декодирования при использовании Reader, чего можно избежать с помощью InputStream.

Подробнее смотрите FileInputStream vs FileReader .

1 голос
/ 24 января 2012

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

1 голос
/ 24 января 2012

Из документов Java:

FileReader предназначен для чтения потоков символов.Для чтения потоков необработанных байтов рассмотрите возможность использования FileInputStream.

Итак, это зависит от ваших требований.

Для большей ясности продолжайте чтение:

FileReader не может обрабатывать потоки сетевых подключений и т. Д.

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

Таким образом, забудьте FileReader (в большинстве случаев).

...