java - POI 读取文件而不更新文件时间戳

标签 java apache-poi

似乎可以使用以下命令打开 Excel 文件

Workbook wb = WorkbookFactory.create(myFile);

...但是,即使没有进行任何更改,调用

wb.close();

...释放资源将导致文件系统上的文件被更新(至少时间戳是,如果没有别的)。我发现解决这个问题的唯一方法是指定应将工作簿创建为“只读”

Workbook wb = WorkbookFactory.create(myFile, true);

我想做的是:

  • 我想从文件中打开现有的工作簿;
  • 立即释放任何文件系统资源,但将工作簿保留在内存中; (这不应该更新原始文件的时间戳);
  • 更改内存中的工作簿;
  • 将修改后的工作簿保存到新文件。

这可能吗?我已经尝试了很多东西,但似乎无法让它发挥作用。如果我不想更新原始文件时间戳,似乎我必须以只读方式打开工作簿。但是后来我无法在内存中修改它以便随后写入新文件。第 22 条军规。

[顺便说一句,我是从文件而不是流创建工作簿,据我所知,它效率更高。如果我使用流,我可以通过自己关闭流来解决这个问题。另外,我使用的是 XLSX/XLSM 而不是 XLS 文件。]

想法?谢谢!

最佳答案

选项可以是:

  1. 创建文件副本并在副本上读/写
  2. 以只读方式打开原始文件,然后根据需要创建副本以写入
  3. 使用来自原始文件的输入流来创建工作簿

关于java - POI 读取文件而不更新文件时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39214769/

相关文章:

javascript - 使用 Rhino 代替 ScriptEngine 在 Java 中运行 Javascript 代码

java - 跟踪选择了哪个枚举?

java - Servlet 响应应该被缓存,但没有

java - 如何使用 apache POI 读取和替换书签值

excel - 使用POI写入日期(不含时间)

java - 使用 spring Batch 和 apache poi 从多个源写入数据

java - Row row = sheet.getRow(row Number) 即使 Excel 工作表中存在行,也会返回 java.lang.nullpointerexception。我正在使用 Apache POI

java - 使用 Apache POI 将文件嵌入到 Excel 中的 XSSF 工作表中

java - 设计复杂度为 O(1) 的数据结构

java - 在 Spring 中将单个 Controller 映射到多个 bean