【问题标题】:Java Scanner doesn't read entire fileJava Scanner 不会读取整个文件
【发布时间】:2015-11-13 03:39:10
【问题描述】:

我有以下代码块:

Scanner reader1 = new Scanner(new FileInputStream(file1));
while(reader1.hasNext())
{
    Store newStore = new Store();
    String[] newValues = reader1.nextLine().split("\\|");
    /**
     * A bunch of code here where I load values from newValues into variables
    **/
    writer1.println(newStore);
}

基本上,我有一个文件,其中包含我公司拥有的商店的信息,我正在逐行浏览该文件,从该文件中提取信息并创建一个包含该信息的 Store 对象,然后将该信息写入另一个文件.

但是,我的 Scanner 对象似乎从未读取整个文件。我做了一些测试,似乎 hasNext() 在文件中的某个点返回 False,但肯定有更多数据可供读取。

这些是大文件;我的源文件大约 4MB,包含有关 6505 商店的信息,但我的输出文件一直到存储 6445,然后突然停在其中一家商店的地址中间。我不明白这可能是什么原因造成的。

StackOverflow 上的其他一些帖子说明了一些可以尝试的事情:

a) 检查您的 Scanner 的编码是否与文件的编码匹配。

我已将文件打开并重新保存为 UTF-8,并确保我的扫描仪使用的是 UTF-8 编码,但我仍然遇到同样的问题。

b) 使用 BufferedReader 而不是 Scanner

我现在使用的是 BufferedReader 而不是 Scanner,我遇到了完全相同的问题。该文件停在完全相同的位置。这是我的 BufferedReader 代码:

BufferedReader reader1 = new BufferedReader(new FileReader(file1));
while(reader1.ready())
    {
        Store newStore = new Store();
        String[] newValues = reader1.readLine().split("\\|");
    /**
     * A bunch of code here where I load values from newValues into variables
    **/
        writer1.println(newStore);
    }

这让我相信它可能与文件大小和内存使用有关,但那是我想不到的。有人可以帮忙吗?

【问题讨论】:

    标签: java java.util.scanner bufferedreader


    【解决方案1】:

    如果您正在阅读台词:

    • 使用Scanner,你应该循环while (scanner.hasNextLine())

    • 使用BuffferedReader,您的循环应该是这样的:

      String line;
      while ((line = reader.readLine()) != null)
      {
          // ...
      }
      

      使用ready() 作为文件结束的测试是无效的。请参阅 Javadoc。

    【讨论】:

      【解决方案2】:

      感谢您的帮助,但我想通了。就像我这个业余爱好者一样,我在终止程序之前并没有关闭我的 writer 对象,所以所有数据都卡在了输出流中并且没有进入文件。

      感谢您的帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-18
        • 2012-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-18
        • 2012-12-02
        • 2021-01-04
        相关资源
        最近更新 更多