gpt4 book ai didi

java - Apache POI 读取 xlsx 输入流问题

转载 作者:行者123 更新时间:2023-12-01 20:25:04 25 4
gpt4 key购买 nike

请忽略这个问题:我这边出现愚蠢的解析错误。

我有一个 API,它允许文件上传并使用 Apache POI 读取文件(如果文件类型不是 .xlsx,则抛出异常)。但是,似乎 WorkbookFactory.create(inputstream) 没有生成正确的文件。当我在代码中读取文件时,在读取应存在数据的单元格时会得到 null 值。代码如下:

     @POST
@Path("<path>")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response submitFile(@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail verticalId) {
try {
StringBuilder fileNameBuilder = new StringBuilder();
String[] names = fileDetail.getFileName().replace(" ", "_").split("\\.");

Contents contents = fileParser.parse(uploadedInputStream);

return Response.ok().build();
}

public class XlsxParser implements FileParser {

public Content parse(File file) throws IOException InvalidFileFormatException{
Content content = new Content();

Workbook file;
try {
designFile = WorkbookFactory.create(file);
} catch (InvalidFormatException exception) {
throw new InvalidFileFormatException("Invalid file format. Expected file type is .xlsx");
}
Sheet sheet = file.getSheetAt(0);

Iterator<Row> rowIterator = sheet.rowIterator();
Row row = rowIterator.next();
int cellCount = row.getPhysicalNumberOfCells();
return content;
}
}

如果我首先从 inputstream 创建一个 .xlsx 文件,然后将 File 对象传递给 WorkbookFactory,则相同的代码可以正常工作。创建()

有人遇到过同样的问题吗?感谢您的帮助。

最佳答案

我之前也遇到过类似的问题。我所做的只是拒绝使用 Workbook.create(InputStream inp) 方法。据我所知,这种方法即将被弃用。 The official documentation告诉我们:

  1. Workbook.create(InputStream inp)Workbook.create(File file) 消耗更多内存。这就是为什么使用第二种方法要好得多。

  2. Workbook.create(InputStream inp) 需要 inp 支持 marking and reseting或被包裹成PushbackInputStream 。这并不是很棘手,但是如果我们可以从 InputStream 创建一个新的 File 并使用更节省内存的方法,为什么要这样做呢?

    <
  3. 为了正确释放资源,Workbook 应在使用后关闭。使用 Workbook.create(File file) 也需要这样做,因此在这里使用 Workbook.create(InputStream inp) 没有任何好处。

  4. 毕竟,Apache POI 的作者建议使用 Workbook.create(File file) 方法,而不是 Workbook.create(InputStream inp) 。可能。

关于java - Apache POI 读取 xlsx 输入流问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43983928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com