【发布时间】:2015-10-10 10:43:44
【问题描述】:
我有非常大的 csv 文件,我正在尝试迭代。我正在使用 opencsv 并且我想使用 CsvToBean 以便我可以从数据库中动态设置列映射。我的问题是如何在不抓取整个文件并将其放入列表的情况下做到这一点。我试图防止内存错误。
我目前正在将整个结果集传递到这样的列表中。
List<MyOption> myObjects = csv.parse(strat, getReader("file.txt"));
for (MyObject myObject : myObjects) {
System.out.println(myObject);
}
但我找到了这个迭代器方法,我想知道这是否只会迭代每一行而不是一次迭代整个文件?
Iterator myObjects = csv.parse(strat, getReader("file.txt")).iterator();
while (myObjects.hasNext()) {
MyObject myObject = (MyObject) myObjects.next();
System.out.println(myObject);
}
所以我的问题是迭代器和列表有什么区别?
【问题讨论】:
-
List vs List iterator 的可能重复项
-
无论哪种方式,CsvToBean 都会将整个文件解析为一个列表并返回(根据我在谷歌上找到的来源)。如果你想处理一个任意大的文件,你需要一个解析器,它一次读取一行,一次返回一个 bean。