Использовать файл или 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 учебники. Нетрудно догадаться.