【发布时间】:2012-03-18 13:11:00
【问题描述】:
我在使用 Scanner 时遇到了奇怪的行为。当我使用 Scanner(FileInputStream) 构造函数时,它将适用于我正在使用的一组特定文件,但不适用于 Scanner(File) 构造函数。
案例一:Scanner(File)
Scanner s = new Scanner(new File("file"));
while(s.hasNextLine()) {
System.out.println(s.nextLine());
}
结果:无输出
案例2:Scanner(FileInputStream)
Scanner s = new Scanner(new FileInputStream(new File("file")));
while(s.hasNextLine()) {
System.out.println(s.nextLine());
}
结果:文件内容输出到控制台。
输入文件是一个包含单个类的 java 文件。
我以编程方式(在 Java 中)仔细检查了:
- 文件存在,
- 可读,
- 并且具有非零文件大小。
通常Scanner(File) 在这种情况下对我有用,我不知道为什么现在不行。
【问题讨论】:
-
这是唯一的代码,还是围绕着这一切发生了其他事情?这个 sn-p 似乎不完整,因为至少会发生一些异常处理。你能提供给我们完整的代码吗?
-
有趣的问题。请在您的文件中发布您的实际代码和粘贴箱。另外,
Charset.defaultCharset()在您的系统上的输出是什么? -
@Perception:我也想过,但 Scanner 的来源似乎暗示他们在这两种情况下都使用默认字符集,如果不使用会明确指定它的构造函数。
-
@kashiko:啊,另一个非常重要的后续问题:文件的大小是多少?
-
我已经更新了我的原始帖子以从我的源文件中复制代码。就像测试一样,我正在读取文件并将其输出到终端。该文件是一个开源项目的java源文件。我的字符集是 UTF-8。文件大小为 18357 字节。
标签: java java.util.scanner java-io