我需要读取大型excel文件并将它们的数据导入到我的应用程序中。
public static void main(String[] args) throws Throwable {
// keep 100 rows in memory, exceeding rows will be flushed to disk
SXSSFWorkbook wb = new SXSSFWorkbook(new XSSFWorkbook(new FileInputStream("C:\\test\\tst.xlsx")));
SXSSFSheet sheet = (SXSSFSheet) wb.getSheetAt(0);
Row row = sheet.getRow(0);
//row is always null
while(row.iterator().hasNext()){ //-> NullPointerException
System.out.println(row.getCell(0).getStringCellValue());
}
}
我在互联网上研究并找到了几个流式API的例子,但它们都不是关于读取现有文件的,它们都是关于生成excel文件的。
实际上是否可以从流中现有的.xlsx
文件中读取数据?
又挖了一些,才发现了这个库:
如果您过去使用过Apache POI读取Excel文件,您可能会注意到它的内存效率不高。读取整个工作簿将导致严重的内存使用量峰值,从而对服务器造成严重破坏。
Apache必须阅读整个工作簿的原因有很多,但大多数都与库允许您使用随机地址进行读写有关。如果(并且只有当)您只是想以快速和有效的方式读取Excel文件的内容,您可能不需要这种能力。不幸的是,POI库中用于读取流工作簿的唯一东西要求您的代码使用类似SAX的解析器。该API中缺少所有友好类,如Row和Cell。
InputStream is = new FileInputStream(new File("/path/to/workbook.xlsx"));
StreamingReader reader = StreamingReader.builder()
.rowCacheSize(100) // number of rows to keep in memory (defaults to 10)
.bufferSize(4096) // buffer size to use when reading InputStream to file (defaults to 1024)
.sheetIndex(0) // index of sheet to use (defaults to 0)
.sheetName("sheet1") // name of sheet to use (overrides sheetIndex)
.read(is); // InputStream or File for XLSX file (required)
还有SAX事件API,它读取文档并通过事件解析其内容。
如果内存占用是一个问题,那么对于XSSF,您可以获取底层XML数据,并自己处理它。这是为那些愿意学习一点.xlsx文件的低级结构并乐于在Java中处理XML的中级开发人员准备的。它使用起来比较简单,但需要对文件结构有一个基本的了解。所提供的优点是,您可以用相对较小的内存占用来读取XLSX文件。
我试图用处理docx文件。只是简单地读取然后写入文件(现在)。这是我的简单代码: 问题是输入文件的头文件中有一个小图像。因此,在使用POI处理输入文件并在Microsoft Word中打开输出文件后,我收到损坏的文件错误: 一切工作在OO Writer,但不是在办公室。 问题是:怎么了?apache POI是否不处理头文件中包含图像的文件?你知道解决这个问题的方法吗? 我需要使用,我不考虑其他工具
嗨,我想在第一行搜索一个字符串,如果找到了,我想移动那一列。
我有一个巨大的excel文件,其中包含大量列,如下所示:- 当我打印excel中的所有值时,我的代码生成的输出是:- 所以,如果我们看看上面的输出,我们可以注意到我留下空白值的单元格没有被POI库拾取。有没有一种方法可以让这些值为空?还是一种识别所呈现的值跳过空白单元格的方法? 请注意:我使用的不是usermodel(org.apache.poi.ss.usermodel),而是一个事件API来处
我需要的是一种使用NPOI库打开.xls文件的方法。提前谢了。
本文向大家介绍Java基于IO流读取文件的方法,包括了Java基于IO流读取文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java基于IO流读取文件的方法。分享给大家供大家参考,具体如下: 希望本文所述对大家Java程序设计有所帮助。
问题内容: 我正在尝试使用PySpark 2.4.0从Kafka读取avro消息。 spark-avro外部模块可以为读取avro文件提供以下解决方案: 但是,我需要阅读流式Avro消息。库文档建议使用 from_avro() 函数,该函数仅适用于Scala和Java。 是否有其他模块支持读取从Kafka流式传输的Avro消息? 问题答案: 您可以包括spark-avro软件包,例如使用(调整版本