2016-07-13 3 views
-2

Я действительно смущен. Я видел много реализаций о том, как читать файл на Java, и чем больше я читаю, тем меньше он имеет смысл для меня.Java - Initialize BufferedReader Object Path Object

Как я уже заметил, предпочтительный способ чтения файла - использовать BufferedReader над Scanner. Но я видел примеры как:

Scanner s = new Scanner(new BufferedReader(...); 

Вместо того, чтобы просто:

Scanner s = new Scanner(new File("foo.txt")); 

Что будет причиной для инициализации Scanner с BufferedReader? Есть ли какие-либо преимущества для этого?

Теперь, что я считаю более запутанным, везде, где я смотрел, есть предложения по использованию Path Объект вместо File. Но я не нашел элегантного способа инициализации BufferedReader с Path Объекты, так как оба BufferedReader & FileReader не может принять Path.

Существует, конечно, способ просто сделать что-то вроде:

Path path = Paths.get("foo.txt"); 
BufferedReader br = new BufferedReader(new FileReader(path.toFile())); 

Но это выглядит как много путаницы.

Мои вопросы относительно BufferedReader являются:

  • Должен ли я использовать даже BufferedReader?
  • Какова цель FileReader? Почему я не могу просто инициализировать BufferedReader с String или Path?
+0

Да, вы должны использовать BufferedReader. Ответ на другой вопрос - «просто потому, что вы можете не означает, что вы должны», который относится и к первому. – Shark

+0

@ Шарк Я не понимаю, ты сказал, что должен, но потом предложил, что я не должен, какой из них? –

+1

Вы должны.Что касается «Почему я не могу просто инициализировать BufferedReader с помощью String или Path» - есть много обходных путей и сокращений в программировании, которые, похоже, упрощают работу, поскольку они вырезают ненужные, возможно сложные части. Но только потому, что вы можете это не значит, что вам нужно. Что касается вашего последнего вопроса - почему он не может быть инициализирован строкой, это будет хорошим вопросом для автора этого класса. В конце концов, прочитайте еще несколько и сделайте обоснованное решение, следует ли вам в этом конкретном случае или нет. – Shark

ответ

3

Должен ли я использовать BufferedReader?

Несомненно, почему бы и нет?

В чем цель FileReader?

Для чтения файлов в символьном режиме.

Почему я не могу просто инициализировать BufferedReader с помощью String или Path?

Потому что он не имеет такой конструктор, и если он сделал это было бы FileReader, которая уже существует, поэтому было бы излишним.

+0

Спасибо, и теперь я читал, что 'FileReader' не должен использоваться вообще, а вместо этого следует использовать' InputStreamReader'. Мне жаль, что не было четкого способа сделать что-то, я задал вопрос, чтобы я мог действительно понять правильный способ решения этой задачи. –

+1

Существует не один «правильный путь». Существует несколько способов, в зависимости от вашего требования. Например, вы можете создать собственный 'InputStreamReader' с кодировкой, отличной от дефолта; или «BufferedReader» с размером буфера не по умолчанию; или ваш вход может вообще не поступать из файла. – EJP

+0

@AlexWeitz Я рад, что вы это поняли. Дает хорошее время, чтобы предложить «FileInputStream» и подумать о том, соответствует ли это требованиям :) – Shark