Java 是否将文件或文件读取器与扫描仪一起使用?

Java 是否将文件或文件读取器与扫描仪一起使用?,java,file-io,java.util.scanner,Java,File Io,Java.util.scanner,免责声明:我已经浏览了所有我能找到的问题,没有一个能回答这个问题。如果你找到了,请给我指一下,礼貌一点 因此,将使用扫描仪打开一个文本文件,如下所示: new Scanner(BufferedReader(FileReader("xanadu.txt"))); 但会使用扫描仪打开一个文本文件,如下所示: new Scanner(new File("myNumbers")); 使用更简单的方法会更好,特别是当我有一个小文件并且可以使用更小的缓冲区时,但我也看到有人说,当你直接打开一个文件时,你

免责声明:我已经浏览了所有我能找到的问题,没有一个能回答这个问题。如果你找到了,请给我指一下,礼貌一点

因此,将使用扫描仪打开一个文本文件,如下所示:

new Scanner(BufferedReader(FileReader("xanadu.txt")));
但会使用扫描仪打开一个文本文件,如下所示:

new Scanner(new File("myNumbers"));
使用更简单的方法会更好,特别是当我有一个小文件并且可以使用更小的缓冲区时,但我也看到有人说,当你直接打开一个文件时,你可以。如果是这样的话,为什么官方文档中会用到这个成语呢

编辑:我还看到了新的扫描仪(FileReader(“blah.txt”)
编辑:我不想就是否使用扫描仪展开辩论。我有一个关于如何使用扫描仪的问题。谢谢。

构造扫描仪对象有多种方法


我个人甚至不会使用扫描仪来读取文件。请看BufferedReader教程。不难理解。

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

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

是的,您可以这样做

基本上你是这样做的:

Scanner file = new Scanner(new FileReader("file.txt"));
要读取字符串,请执行以下操作:

String s = file.next();
处理完文件后,请执行以下操作:

file.close();

马匹在球场上奔跑。从Scanner javadocs来看,Scanner是“一个简单的文本扫描器,它可以使用正则表达式来解析基本类型和字符串”,因此,我对您的问题的看法是:不管您使用哪种方法,文件的简单选项与Oracle教程中的选项一样好。扫描仪是为了方便地标记文本文件,如果您的文件很小,正如您所说的,它是一个完美的选择


因为扫描器使用正则表达式,所以无论是否为扫描器创建缓冲文件读取器,都不能期望它有巨大的性能。底层可读对象将是close()d(如果它是Closeable,那么它将是Closeable,如果使用Scanner(File)构造函数),因此只要关闭()Scanner对象(或者使用try with resources),就不必担心了。

这根本不能回答我的问题。如果你要回答这个问题,请阅读。注意:关于是使用Scanner还是straight BufferedReader有很多争论。两者都是由Java提供的,我试图找出使用它的最佳实践,而不是决定是否使用它。是的,我读过它,没有回答我的问题,如果你读过我的问题,你就会知道!如果能说明偏好的原因会更好是的,我知道文件无法关闭。那么,你是否留下了一个资源(正如问题中的链接所建议的那样),你没有留下任何东西。File类只是物理文件的信息持有者。它不是一个文件句柄。正如@Tudor所指出的,文件不会关闭()-当您以这种方式使用Scanner时,实际文件是否会关闭,或者资源是否挂起?是的,如果您将文件传递到Scanner构造函数,它将用于打开流,调用Scanner.close()方法时将关闭流。不管使用什么构造函数,如果正确调用close()(例如从try/finally),那么它将正确关闭。