2016-08-05 119 views
1

我正在使用數據庫來存儲blob。然後我使用JPA將blob讀入實體。所以基本上我有一個byte[]在EJB中創建臨時文件或虛擬文件

我使用的庫中有一個類的構造函數採用foo(String filePath)foo(File file)

我正在使用EJB,因此我無權訪問服務器文件系統。我所擁有的是blob的二進制數據。有沒有辦法以某種方式創建一個File對象來指向我的EJB世界中的數據,以便我可以使用我的庫?某種或包裝?

+0

這實際上是一個設計不佳的API。在他們的問題跟蹤器中創建一個增強請求,其中您請求他們添加採用普通「InputStream」的方法。 – BalusC

+1

你最好的選擇(給定循環)是使用'FileOutputStream'將你的二進制數組刷新到一個臨時文件(即'File.createTempFile(...)'),調用這個庫,然後刪除你的臨時文件... –

回答

-1

你可以這樣做

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

真正的文件,直到您將文件對象上調用方法createNewFile()將不會被創建。

+0

我能否在不創建文件的情況下訪問byte []數據? – user489041

+0

關於你的問題,你想要一個指向你的數據的File對象。如果你不需要File對象,你可以將它轉換爲ByteArrayInputStream並在這個流上做任何你想做的事情。 –

+1

*「只有在您的文件對象上調用方法createNewFile()之前,纔會創建真實文件。」*對不起,這是無稽之談。 – BalusC

1

雖然不應該在EJB環境中創建文件,但通過Java SE的File類可以創建一個臨時文件,該文件將存儲在用戶的臨時文件文件夾中關聯應用程序服務器進程。例如,下面的代碼片段創建將被放置在臨時文件夾中的臨時文件

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

歡迎來到Stack Overflow。向你的代碼添加一些解釋也許是有用的。 – Tyler