【问题标题】:SXSSFWorkbook with Custom temp file带有自定义临时文件的 SXSSFWorkbook
【发布时间】:2015-06-22 21:35:44
【问题描述】:

SXSSFWorkbook 做我想做的事,但我想使用不同类型的临时文件,而不是提供的和看似融入实现的临时文件。

在 SheetDataWriter 中

 public File createTempFile() throws IOException {
        return TempFile.createTempFile("poi-sxssf-sheet", ".xml");
    }

所以...我可以通过创建 MySheetDataWriter 并覆盖对 createTempFile 的调用来扩展它。但是,我无法在 SXSSFWorkbook 中使用 MySheetDataWriter ...如果我尝试扩展它,那么包保护方法...不能被覆盖,因为它不可见。 来自 SXSSFWorkbook

SheetDataWriter createSheetDataWriter() throws IOException {
        if(_compressTmpFiles) {
            return new GZIPSheetDataWriter(_sharedStringSource);
        }

        return new SheetDataWriter(_sharedStringSource);
    }

所以底线是我可以几乎完全按原样使用该实现,但我需要一种不同类型的 Temp 文件......甚至不仅仅是一个不同的目录来放置它,而是一个完全不同的实现。关于如何做到这一点的任何想法?

【问题讨论】:

  • 你想用你的备用临时文件实现什么?使用属性可以轻松更改临时文件进入的目录,例如

标签: apache-poi


【解决方案1】:

从版本 3.11 开始,您提到的 createTempFile 方法(来自 @987654321@ 类)使用可替换的 TempFileCreationStrategy,可以使用 setTempFileCreationStrategy 方法选择。

以下示例扩展了默认策略以记录创建的每个临时文件,但您可以将其更改为返回自定义 File 实例。

TempFile.setTempFileCreationStrategy(new TempFile.DefaultTempFileCreationStrategy() {
  @Override
  public File createTempFile(String prefix, String suffix) throws IOException {
    File f = super.createTempFile(prefix, suffix);
    log.debug("Created temp file: " + f);
    return f;
  }
});

【讨论】:

    猜你喜欢
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2013-04-22
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多