Подтвердить что ты не робот

Использовать файл или FileReader со сканером?

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

Итак, учебник Oracle I/O открывает текстовый файл со Сканером следующим образом:

new Scanner(BufferedReader(FileReader("xanadu.txt")));

Но Javadoc открывает текстовый файл со Сканером следующим образом:

new Scanner(new File("myNumbers"));

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

Изменить: я также видел new Scanner(FileReader("blah.txt"));, но это похоже на худшее из обоих миров.

Изменить: я не пытаюсь начать дискуссию о том, использовать сканер или нет. У меня вопрос о том, как использовать сканер. Спасибо.

4b9b3361

Ответ 1

Вы можете посмотреть на реализацию Сканера (JDK поставляется с исходным кодом). Существует метод close() в классе Scanner. По сути, оба подхода, которые вы указали, идентичны для вашего случая чтения небольшого файла - просто не забудьте вызвать close() в конце.

Ответ 2

Класс File не имеет метода close(), поскольку он только абстрагирует файл диска. Это не входной поток для файла, поэтому закрыть его нечем.

Ответ 3

Да, вы можете это сделать.

В основном вы:

Scanner file = new Scanner(new FileReader("file.txt"));

Чтобы прочитать строку:

String s = file.next();

Когда вы закончите работу с файлом, выполните

file.close();

Ответ 4

Лошади для курсов. Из сканера javadocs сканер представляет собой текстовый сканер A simple, который может анализировать примитивные типы и строки с использованием регулярных выражений. " Итак, я беру на себя ваш вопрос: не имеет значения, какой подход вы используете, более простой вариант с файлом так же хорош, как тот, который содержится в учебниках Oracle. Сканер предназначен для удобной маркировки текстовых файлов, и если ваш файл невелик, как вы сказали, он идеально подходит.

Поскольку сканер использует регулярные выражения, вы не можете ожидать огромной производительности, независимо от того, создаете ли вы буферизованный считыватель файлов для сканера или нет. Подчиняемый Readable будет close() d (если он является Closeable, каким он будет, если вы используете конструктор Scanner (File)), и вам не нужно беспокоиться, пока вы закрываете() свой объект Scanner (или используйте try-with-resources).

Ответ 5

Существует несколько способов создания объекта Scanner.

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

Я лично даже не использовал Scanner для чтения файлов. Посмотрите на учебники BufferedReader. Это не слишком сложно понять.