2016-08-05 49 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