繁体   English   中英

Java扫描器无法读取整个文件

[英]Java Scanner doesn't read entire file

我有以下代码块:

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);
    }

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

如果您正在阅读台词:

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

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

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

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

感谢您的帮助,但我发现了。 就像我是业余爱好者一样,我在终止程序之前没有关闭我的writer对象,因此所有数据都停留在输出流中,并且没有存储到文件中。

谢谢您的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM