изменение местоположения временных файлов, созданных с помощью Apache POI - PullRequest
7 голосов
/ 14 марта 2011

У меня проблема с чтением файла .xlsx. Некоторые временные файлы со случайным именем создаются в каталоге / tmp / poifiles всякий раз, когда я использую WorkbookFactory.create (inputStream) ;. Этот каталог создается с RW-R-R-разрешением для первого пользователя. Таким образом, другой пользователь на той же машине, когда пытается получить доступ к этим файлам, он не может.

Пожалуйста, предложите мне любой способ

1) Как я могу создать эти временные файлы в каталоге / tmp и не всегда в / tmp / poifiles (я использую RHEL V5.0)

2) и как я могу настроить POI, например, чтобы изменить местоположение, откуда он читает временные файлы ??

Больше не требуется помощь в решении моей проблемы, так как разные пользователи обращаются к одним и тем же файлам .xlsx через POI.

Ответы [ 2 ]

12 голосов
/ 16 марта 2011

Яппи ... Я получил решение ....

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 внутри этого ...

Я изменил расположение java.io.tmpdir, установив это свойство (используя System.setProperty ("java.io.tmpdir"," somepath ")) для определенного пользователя местоположения .. и вуаля .... Каждый пользователь теперь может создавать временные файлы в всегда доступном для них месте, и не только первый пользователь получает право создавать каталог, доступный только ему ... !!!

4 голосов
/ 17 февраля 2016

Вот как вы можете изменить местоположение, из которого POI считывает временные файлы программно, если вы не можете изменить системное свойство "java.io.tmpdir"

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

Это определяется Вспомогательный класс Apache POI TempFile

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...