【发布时间】:2014-11-04 16:43:03
【问题描述】:
我正在尝试读取 xlsx 文件。我正在使用 poi 3.10-FINAL。
我的代码是
FileInputStream fs = new FileInputStream("abc.xlsx");
XSSFWorkbook wb = new XSSFWorkbook(fs);
row_count = 0;
for (int k = 0; k < wb.getNumberOfSheets(); k++) {
XSSFSheet sheet = wb.getSheetAt(k);
if (sheet.getLastRowNum() > 0) {
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next(); // throws ConcurrentModificationException
if (row_count == 0) {
col_count = row.getLastCellNum();
//Do something
} else {
if (row.getCell(1).equals("XYZ")) {
sheet.removeRow(row); //throws XmlValueDisconnectedException
}
}
row_count++;
}
}
}
当我在没有sheet.removeRow(row) 的情况下执行我的代码时,它可以正常工作。但是当我添加 removeRow 调用时,它会引发 XmlValueDisconnectedException 异常。
谁能帮我解释一下为什么会出现这个异常。
更新:
我很惊讶,但现在我收到了ConcurrentModificationException 异常。一旦它执行 removeRow() 然后当它返回到 rowIterator.next() 时,它就会抛出异常。我已经在代码中提到了异常的位置。
堆栈跟踪是
java.util.ConcurrentModificationException
at java.util.TreeMap$PrivateEntryIterator.nextEntry(Unknown Source)
at java.util.TreeMap$ValueIterator.next(Unknown Source)
at com.test.app.services.ExecuteImport.uploadFile(ExecuteImport.java:144)
at com.test.app.controller.MyController.upload(MyController.java:271)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
谢谢。
【问题讨论】:
-
请添加堆栈跟踪
-
请找到我更新的问题
-
那么您就有了答案,您在遍历集合时尝试删除。你不能那样做。
-
那怎么删除呢?
标签: java apache-poi xlsx