Я действительно смущен. Я видел много реализаций о том, как читать файл на 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
?
Да, вы должны использовать BufferedReader. Ответ на другой вопрос - «просто потому, что вы можете не означает, что вы должны», который относится и к первому. – Shark
@ Шарк Я не понимаю, ты сказал, что должен, но потом предложил, что я не должен, какой из них? –
Вы должны.Что касается «Почему я не могу просто инициализировать BufferedReader с помощью String или Path» - есть много обходных путей и сокращений в программировании, которые, похоже, упрощают работу, поскольку они вырезают ненужные, возможно сложные части. Но только потому, что вы можете это не значит, что вам нужно. Что касается вашего последнего вопроса - почему он не может быть инициализирован строкой, это будет хорошим вопросом для автора этого класса. В конце концов, прочитайте еще несколько и сделайте обоснованное решение, следует ли вам в этом конкретном случае или нет. – Shark