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() returns False,但肯定有更多数据可供读取。
这些都是大文件;我的源文件大约 4MB,包含有关 6505 家商店的信息,但我的输出文件一直存储到 6445,然后突然停在其中一家商店地址的中间。我不明白是什么原因造成的。
Whosebug 上的一些其他帖子已经说明了一些可以尝试的事情:
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 对象,所以所有数据都停留在输出流中,没有进入文件。
感谢您的帮助!
我有以下代码块:
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() returns False,但肯定有更多数据可供读取。
这些都是大文件;我的源文件大约 4MB,包含有关 6505 家商店的信息,但我的输出文件一直存储到 6445,然后突然停在其中一家商店地址的中间。我不明白是什么原因造成的。
Whosebug 上的一些其他帖子已经说明了一些可以尝试的事情:
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 对象,所以所有数据都停留在输出流中,没有进入文件。
感谢您的帮助!