我有逗号分隔的CSV文件,我有从第二行读取它的代码。但它给了我以下错误。 线程“AWT-EventQueue-0”中的异常java.lang.OutOfMemoryError:Java堆空间
这是我的代码。
public static List<String> readCSV(String path){
BufferedReader br = null;
String[] cd = null;
String line ="";
String split=",";
List<String> list = new ArrayList<String>();
try {
br=new BufferedReader(new FileReader(path));
while ((line = br.readLine()) != null) {
boolean firstLine = true;
while (line != null && line.startsWith("child's Last Name")) {
if (firstLine) {
firstLine = false;
continue;
} else {
list.add(line);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return list;
}
如何使用此代码修复它..
提前致谢!
答案 0 :(得分:1)
在您的第二个while
循环中,您又在哪里分配line
while (line != null && line.startsWith("child's Last Name"))
一旦满足此条件,您就不会重新分配它 你的代码应该是不同的,比如,
boolean firstLine = true;
while ((line = br.readLine()) != null)
{
if (firstLine)
{
firstLine = false;
continue;
}
else if(line != null && line.startsWith("child's Last Name"))
{
list.add(line);
}
}
答案 1 :(得分:0)
通常,当你......嗯......内存不足以运行应用程序时,会出现内存不足错误。你调试过了吗?你可能陷入无休止的循环......
while (line != null && line.startsWith("child's Last Name")) {
这应该是if语句吗?
编辑:
while ((line = br.readLine()) != null) {
这应该是:
while(br.hasNext()) {
答案 2 :(得分:0)
你的问题与第二行没有关系;你只是试图将整个文件放在list
中,最终,这些内容太多而无法适应内存。你有两个选择:
更新:哦,哎呀,是的,正如其他人所说,你也陷入了无尽的循环。一旦你修复了这个答案,请考虑这个答案!
答案 3 :(得分:0)
尝试
br=new BufferedReader(new FileReader(path));
boolean firstLine = true;
while ((line = br.readLine()) != null) {
if (line.startsWith("child's Last Name")) {
if (firstLine) {
firstLine = false;
continue;
}
list.add(line);
}
}
不需要两个while循环
答案 4 :(得分:-1)
试试这个..
br=new BufferedReader(new FileReader(path));
br.readLine();
while ((line = br.readLine()) != null) {
if (line.startsWith("child's Last Name")) {
list.add(line);
}
}