Как изменить имя временного файла Apache POI SXSSFWorkbook по умолчанию

#apache #apache-poi #sxssf

#apache-poi #sxssf

Вопрос:

Я использую класс POI SXSSFWorkbench для создания чрезвычайно больших рабочих книг. В моем приложении может быть запущено несколько процессов одновременно, поэтому я счел разумным добавить ProcessId к временному имени файла по умолчанию. Я не знаю, как это сделать, и не смог найти ни одного недавнего примера кодирования.

Кто-нибудь может указать мне на пример или описать, что нужно сделать? Я вижу, что существует статический метод TempFile.createTempFile. Должен ли я выполнять это с использованием переопределения класса перед созданием экземпляра класса SXSSFWorkbook? Или после?

Я также видел, что существует класс DefaultTempFileCreationStrategy. Также не удалось найти примеры того, как это использовать.

Ответ №1:

Основным классом, который использует Apache POI для этого, является TempFile

Метод, который вы захотите вызвать, — это TempFile.setTempFileCreationStrategy

Что вам нужно будет сделать, это создать свой собственный класс, реализующий интерфейс TempFileCreationStrategy. Это красиво и просто, всего двумя методами, createTempDirectory и createTempFile.

Чтобы получить представление о том, что с этим связано, вы можете посмотреть исходный код DefaultTempFileCreationStrategy онлайн здесь. Это довольно просто, просто добавьте логику для ваших собственных нужд с точки зрения потоков и именования.

Комментарии:

1. Спасибо. Это было полезно. Я смущен, что не видел этого раньше. Для пояснения: вызов TempFile.setTempFileCreationStrategy должен выполняться перед созданием экземпляра объекта SXSSFWorkbook? Или сразу после создания объекта workbook? Или в любое время после создания SXSSFWorkbook и первого листа? Эта часть мне не ясна.

2. Необходимо установить перед открытием книги, чтобы использовать временные файлы в зависимости от выбранных параметров

3. Будьте осторожны при использовании in в многопоточной среде.