2016-08-05 3 views
1

Я использую базу данных для хранения blob. Затем я использую JPA для чтения блоба в объект. Так что в основном у меня есть byte[].Создайте временный или виртуальный файл в EJB

В библиотеке есть класс, чей конструктор принимает либо foo(String filePath), либо foo(File file).

Я использую EJB, поэтому у меня нет доступа к файловой системе серверов. Все, что у меня есть, это двоичные данные для blob. Есть ли способ создать объект File каким-то образом, который указывает на мои данные в мире EJB, чтобы я мог использовать свою библиотеку? Какой-то или обертка?

+0

Это действительно плохо разработанный API. Создайте запрос на улучшение в своем трекер-проблеме, в котором вы просите их добавить метод, принимающий обычный 'InputStream'. – BalusC

+1

Лучший вариант (с учетом циркуляции) - это очистить ваш двоичный массив от временного файла (то есть 'File.createTempFile (...)') с помощью 'FileOutputStream', вызвать библиотеку и позже удалить временный файл ... –

ответ

-1

Вы можете сделать как этот

File file = new File(path); 
FileOutputStream fos = new FileOutputStream(file); 
fos.write(byteArray); 
fos.close(); 

Реальный файл не будет создан до вызова методы createNewFile() для объекта файла.

+0

Могу ли я получить доступ к байтам [] без создания файла? – user489041

+0

Что касается вашего вопроса, вы хотите иметь объект File, указывающий на ваши данные. Если вам не нужен объект File, вы можете просто преобразовать его в ByteArrayInputStream и делать все, что хотите в этом потоке. –

+1

* «Настоящий файл не будет создан до тех пор, пока вы не вызовете метод createNewFile() в вашем файловом объекте». * Извините, это вздор. – BalusC

1

Хотя вы не должны создавать файлы в среде EJB, а тем более иметь папку, связанную с вашим приложением через класс файлов Java SE, можно создать временный файл, который будет храниться во временной папке пользователя пользователя. связанный с процессом сервера приложений. Например, следующий фрагмент кода создать временный файл, который будет помещен в папке временных файлов

File tempV1 = File.createTempFile("tempfile", ".tmp"); 
//C:\Users\JAVIER~1.ZAM\AppData\Local\Temp\file4872171473798955694.tmp 

Если назначить специальную папку для временных файлов, вы можете передать его в качестве параметра следующим образом:

File tempV2 = File.createTempFile("tempfile", ".tmp", 
            new File("c:/server/temporal")); 
//C:\server\temporal\file631043069173548312.tmp 
+1

Добро пожаловать в переполнение стека. Возможно, было бы полезно добавить некоторые пояснения к вашему коду. – Tyler

Смежные вопросы