似乎可以使用以下命令打开 Excel 文件
Workbook wb = WorkbookFactory.create(myFile);
...但是,即使没有进行任何更改,调用
wb.close();
...释放资源将导致文件系统上的文件被更新(至少时间戳是,如果没有别的)。我发现解决这个问题的唯一方法是指定应将工作簿创建为“只读”
Workbook wb = WorkbookFactory.create(myFile, true);
我想做的是:
- 我想从文件中打开现有的工作簿;
- 立即释放任何文件系统资源,但将工作簿保留在内存中; (这不应该更新原始文件的时间戳);
- 更改内存中的工作簿;
- 将修改后的工作簿保存到新文件。
这可能吗?我已经尝试了很多东西,但似乎无法让它发挥作用。如果我不想更新原始文件时间戳,似乎我必须以只读方式打开工作簿。但是后来我无法在内存中修改它以便随后写入新文件。第 22 条军规。
[顺便说一句,我是从文件而不是流创建工作簿,据我所知,它效率更高。如果我使用流,我可以通过自己关闭流来解决这个问题。另外,我使用的是 XLSX/XLSM 而不是 XLS 文件。]
想法?谢谢!
最佳答案
选项可以是:
- 创建文件副本并在副本上读/写
- 以只读方式打开原始文件,然后根据需要创建副本以写入
- 使用来自原始文件的输入流来创建工作簿
关于java - POI 读取文件而不更新文件时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39214769/