将文件或FileReader与扫描仪一起使用?

时间:2012-01-26 16:04:07

标签: java file-io java.util.scanner

免责声明:我查看了所有可以找到的问题,但没有一个能回答这个问题。如果你找到一个,请指出我并礼貌。

因此,Oracle I/O tutorial打开一个包含Scanner的文本文件,如下所示:

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

Javadoc打开一个带有Scanner的文本文件,如下所示:

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

使用更简单的方法会很好,特别是当我有一个小文件并且可以使用较小的缓冲区时,但我也看到有人说当你直接打开文件时can't close it。如果是这样的话,为什么在官方文档中使用这个习语?

编辑:我也看过new Scanner(FileReader("blah.txt"));,但这似乎是两个世界中最糟糕的。

编辑:我不打算开始讨论是否使用Scanner。我有一个关于如何使用扫描仪的问题。谢谢。

5 个答案:

答案 0 :(得分:5)

您可以查看Scanner的实现(JDK附带源代码)。 Scanner类中也有一个close()方法。基本上,您列出的两种方法对于读取小文件的用例都是相同的 - 只是不要忘记在最后调用close()。

答案 1 :(得分:2)

File类没有close()方法,因为它只抽象磁盘文件。它不是文件的输入流,因此无需关闭。

答案 2 :(得分:1)

是的,你可以做到。

基本上你这样做:

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

读取字符串:

String s = file.next();

完成文件后,请执行

file.close();

答案 3 :(得分:1)

马匹课程。在Scanner javadocs中,扫描仪是一个简单文本扫描程序,它可以使用正则表达式解析基本类型和字符串。"因此,我对您的问题的看法是:使用哪种方法无关紧要,File的简单选项与Oracle教程中的选项一样好。扫描程序用于方便地对文本文件进行标记,如果您的文件很小,正如您所说,它非常适合。

由于扫描仪使用正则表达式,无论您是否为扫描仪创建缓冲文件读取器,您都无法真正期望它具有巨大的性能。基础Readable将是close()d(如果它是一个可关闭的,如果你使用扫描器(文件)构造函数它将是它),所以你不必担心,只要你关闭()您的Scanner对象(或使用try-with-resources)。

答案 4 :(得分:-3)

构建Scanner对象有多种方法。

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

我个人甚至不会使用Scanner进行文件阅读。查看BufferedReader教程。要弄清楚它并不难。