【发布时间】:2017-04-21 07:20:32
【问题描述】:
上下文:我正在使用 Apache POI 库以某种格式读取 Excel 文件。每个文件只有一张纸和一个特定的模板。我能够阅读工作表,对值执行一些操作,将它们存储为 POJO,然后使用 JAXB 实现将它们转换为 XML。
问题:我现在只读取几个 excel 文件(比如 100 个),但我想设计我的应用程序,使其可扩展足以读取大约 1000 到 10000 个文件. 你能推荐一个好的架构吗?另外,我是否应该使用多线程(比如 10 个线程的线程池)一次读取 10 张纸,或者考虑到每张纸都有单独的数据且不与任何其他纸相互关联的事实,这是一个糟糕的设计。
注意: 我不能共享任何代码 sn-ps,因为这是专有代码,尽管为了假设,我们可以假设每张工作表有 50 行,每行有 6 到 10 列,所有单元格中都有纯文本数据。 由于文件很小,我将整个文件加载到内存中,然后对其进行处理。另外,我正在使用 apache poi 代码来遍历行和列(示例如下)
XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
sheet = workbook.getSheetAt(0);
//outer for loop using 'i' to iterate all rows
row = sheet.getRow(i);
//inner for loop using 'j' to iterate all columns in a row
value = row.getCell(j)
//use 'value' as and when required
//end inner for loop
//end outer for loop
附:这是我关于 SO 的第一个问题,因此请随时在我的问题中提出任何更改/改进建议。
感谢和问候, 席德
【问题讨论】:
-
好吧,我们必须知道您如何准确地读取数据。您可以更改代码以模拟您读取数据的方式(专有的东西应该不是问题)
-
由于它们没有相互关联,因此非常适合并行处理。
-
@XtremeBaumer 添加了一个 sn-p。请看看它是否有帮助。
-
从查看代码 sn-p 我会说你在那里犯了一些错误。可悲的是,我真的不明白你的意思:
the fact that each sheet has separate data that it not interlinked with any other sheet。我认为你能做的最好的就是切换到并行流来实现这一点。它可能会更快。否则尝试使用多线程 -
@XtremeBaumer 您能否详细说明“切换到并行流”的含义。
标签: java excel multithreading apache-poi