我在谷歌搜索但找不到下面提到的问题的正确答案。请原谅我这是一个重复的问题,但我找不到任何正确的答案。
所以,提出问题。我必须用Java读取多个Excel文件,并从这些多个文件中生成最终的Excel报告文件。
有2个文件夹:
源文件夹:它包含多个Excel文件(可能是10,000个文件)
目标文件夹:从Source文件夹中读取所有文件后,此文件夹将有一个最终的Master Excel文件。
对于从Source文件夹读取的每个Excel文件,Destination文件夹中的主文件将各有1行。
我计划使用Apache POI在Java中读写excel文件。
我知道使用POI可以很容易地在Java中读取和写入文件,但我的问题是,在这种情况下,有近10,000个文件可以读取和写入1个单个主文件,这样做的最佳方法是什么,考虑所花费的时间和程序使用的CPU。一次读取1个文件将耗费太多时间。
所以,我打算一次使用线程来批量处理100个文件。请问有人可以给我一些资源或建议我如何处理这个要求吗?
编辑:
我已经编写了程序来使用POI读写文件。下面提到了相同的代码:
// Loop through the directory, fetching each file.
File sourceDir = new File("SourceFolder");
System.out.println("The current directory is = "+sourceDir);
if(sourceDir.exists()) {
if(sourceDir.isDirectory()){
String[] filesInsideThisDir = sourceDir.list();
numberOfFiles = filesInsideThisDir.length;
for(String filename : filesInsideThisDir){
System.out.println("(processFiles) The file name to read is = "+filename);
// Read each file
readExcelFile(filename);
// Write the data
writeMasterReport();
}
} else {
System.out.println("(processFiles) Source directory specified is not a directory.");
}
} else {
}
这里,SourceFolder包含要读取的所有Excel文件。我循环浏览此文件夹,一次读取1个文件,读取内容,然后写入1个Master Excel文件。
readExcelFile()方法正在读取每个excel文件,并创建一个List,其中包含要写入Master excel文件的每一行的数据。
writeMasterReport()方法正在写入从每个excel文件中读取的数据。
程序运行正常。我的问题是,有什么办法可以通过使用Threads来读取文件来优化这段代码吗?我知道只有一个文件可以写入,并且不能并行完成。如果sourceFolder包含10,000个文件,以这种方式读取和写入将花费大量时间来执行。
每个输入文件的大小约为几百KB。
所以,我的问题是,我们可以使用Threads批量读取文件,比如说每个线程100或500个文件,然后为每个线程写入数据吗?我知道写部分需要同步。这样至少可以最小化读写时间。请让我知道你对此的看法。
答案 0 :(得分:0)
有10k的文件~100Kb我们每个人都在谈论阅读ca. ~1Gb的数据。如果处理过于复杂(似乎是这样),那么你的瓶颈将是IO。
因此IO最有可能并行化读取和处理文件,因为IO有一个上限 如果处理是复杂的/瓶颈,并行化将是有意义的。这似乎不是这种情况。