在EJB中创建临时文件或虚拟文件
我正在使用数据库来存储blob。然后我使用JPA将blob读入实体。所以基本上我有一个byte[]
。在EJB中创建临时文件或虚拟文件
我使用的库中有一个类的构造函数采用foo(String filePath)
或foo(File file)
。
我正在使用EJB,因此我无权访问服务器文件系统。我所拥有的是blob的二进制数据。有没有办法以某种方式创建一个File对象来指向我的EJB世界中的数据,以便我可以使用我的库?某种或包装?
你可以这样做
File file = new File(path);
FileOutputStream fos = new FileOutputStream(file);
fos.write(byteArray);
fos.close();
真正的文件,直到您将文件对象上调用方法createNewFile()将不会被创建。
我能否在不创建文件的情况下访问byte []数据? – user489041
关于你的问题,你想要一个指向你的数据的File对象。如果你不需要File对象,你可以将它转换为ByteArrayInputStream并在这个流上做任何你想做的事情。 –
*“只有在您的文件对象上调用方法createNewFile()之前,才会创建真实文件。”*对不起,这是无稽之谈。 – BalusC
虽然不应该在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
欢迎来到Stack Overflow。向你的代码添加一些解释也许是有用的。 – Tyler
这实际上是一个设计不佳的API。在他们的问题跟踪器中创建一个增强请求,其中您请求他们添加采用普通“InputStream”的方法。 – BalusC
你最好的选择(给定循环)是使用'FileOutputStream'将你的二进制数组刷新到一个临时文件(即'File.createTempFile(...)'),调用这个库,然后删除你的临时文件... –