10

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

请以任何方式建议我

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

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

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

4

2 回答 2

15

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

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 的位置..并且瞧....每个用户现在都可以创建他们始终可以访问该位置的临时文件,并且不仅第一个用户有权创建只有他可以访问的目录...!!!

于 2011-03-16T11:20:23.647 回答
11

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

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

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

于 2016-02-17T09:49:38.817 回答