[英]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.