【问题标题】:changing location of temp files created using Apache POI更改使用 Apache POI 创建的临时文件的位置
【发布时间】:2011-07-14 22:49:14
【问题描述】:

我遇到了读取 .xlsx 文件的问题。每当我使用 WorkbookFactory.create(inputStream); 时,都会在 /tmp/poifiles 目录下创建一些具有随机名称的临时文件。此目录是使用第一个用户的 RW-R-R- 权限创建的。因此,同一台机器上的另一个用户尝试访问这些文件时,他不能。

请给我建议

1) 如何在 /tmp 目录下创建这些临时文件,而不是总是在 /tmp/poifiles 中(我使用的是 RHEL V5.0)

2) 以及如何配置 POI,例如更改读取临时文件的位置??

急需更多帮助来解决我的不同用户通过 POI 访问相同 .xlsx 文件的问题。

【问题讨论】:

    标签: java apache-poi xlsx


    【解决方案1】:

    雅皮士......我找到了解决方案......

    POI 使用以下方法创建临时文件。

    public static File createTempFile(String prefix, String suffix)
    {
        if (dir == null) {
            dir = new File(System.getProperty("java.io.tmpdir"), "poifiles");
            dir.mkdir();
            if (System.getProperty("poi.keep.tmp.files") == null) {
                dir.deleteOnExit();
            }
        }
        File newFile = new File(dir, prefix + rnd.nextInt() + suffix);
        if (System.getProperty("poi.keep.tmp.files") == null) {
            newFile.deleteOnExit();
        }
        return newFile;
    }
    

    现在我们可以看到它从属性“java.io.tmpdir”获取位置并在其中创建 poifiles 目录...

    我通过将此属性(使用 System.setProperty("java.io.tmpdir", "somepath"))设置为用户特定位置来更改 java.io.tmpdir 的位置..并且瞧....每个用户现在可以在他们始终可以访问的位置创建临时文件,并且不仅第一个用户有权创建只有他可以访问的目录...!!!

    【讨论】:

      【解决方案2】:

      如果您无法更改系统属性“java.io.tmpdir”,您可以通过以下方式更改 POI 以编程方式读取临时文件的位置

      File dir = new File("somepath");
      dir.mkdir();
      TempFile.setTempFileCreationStrategy(new DefaultTempFileCreationStrategy(dir));
      

      这是由 Apache POI TempFileDefaultTempFileCreationStrategy 辅助类驱动的。

      【讨论】:

        猜你喜欢
        • 2013-03-22
        • 2020-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-18
        • 2017-10-01
        • 1970-01-01
        相关资源
        最近更新 更多