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

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

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

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

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

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

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

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

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

5 ответов


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


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


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

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

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

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

String s = file.next();

когда вы закончите с файлом, сделайте

file.close();

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

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


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

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

Я лично даже не использовал бы сканер для чтения файлов. Посмотри командой bufferedreader учебники. Нетрудно догадаться.