Использовать File или FileReader со сканером? - PullRequest
14 голосов
/ 26 января 2012

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

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

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

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

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

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

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

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

Ответы [ 5 ]

5 голосов
/ 26 января 2012

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

2 голосов
/ 26 января 2012

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

1 голос
/ 27 ноября 2013

Лошади на курсы. Сканер javadocs Scanner - это « простой текстовый сканер, который может анализировать примитивные типы и строки, используя регулярные выражения ». Итак, я хочу ответить на ваш вопрос: не имеет значения, какой подход вы используете, более простой вариант с File так же хорош, как и тот, который вы найдете в руководствах по Oracle. Сканер предназначен для удобной маркировки текстовых файлов, а если ваш файл небольшой, как вы сказали, то он идеально подойдет.

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

1 голос
/ 11 сентября 2013

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

В основном вы делаете:

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

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

String s = file.next();

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

file.close();
0 голосов
/ 26 января 2012

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

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

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

...