Java Scanner不读取整个文件

时间:2015-11-13 03:39:10

标签: java java.util.scanner bufferedreader

我有以下代码块:

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)检查您的扫描器的编码是否与文件的编码匹配。

我已经打开并以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);
    }

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

2 个答案:

答案 0 :(得分:0)

如果你正在读行:

  • Scanner,您应该循环while (scanner.hasNextLine())

  • BuffferedReader,你的循环应该如此:

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

    使用ready()作为文件结尾的测试无效。见Javadoc。

答案 1 :(得分:0)

感谢您的帮助,但我明白了。就像我的业余爱好者一样,在终止程序之前我没有关闭我的编写器对象,因此所有数据都停留在输出流中并且没有进入文件。

感谢您的帮助!