免责声明:我查看了所有可以找到的问题,但没有一个能回答这个问题。如果你找到一个,请指出我并礼貌。
因此,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。我有一个关于如何使用扫描仪的问题。谢谢。
答案 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教程。要弄清楚它并不难。