Jakarta ee 在EJB中创建临时文件或虚拟文件

Jakarta ee 在EJB中创建临时文件或虚拟文件,jakarta-ee,ejb,Jakarta Ee,Ejb,我正在使用一个数据库来存储一个blob。然后我使用JPA将blob读入一个实体。所以基本上我有一个字节[] 我正在使用的库中有一个类的构造函数采用foo(字符串文件路径)或foo(文件文件) 我正在使用EJB,因此无法访问服务器文件系统。我所拥有的只是blob的二进制数据。是否有一种方法可以以某种方式创建指向EJB世界中的数据的文件对象,以便使用我的库?某种包装?你可以这样做 File file = new File(path); FileOutputStream fos = new FileO

我正在使用一个数据库来存储一个blob。然后我使用JPA将blob读入一个实体。所以基本上我有一个
字节[]

我正在使用的库中有一个类的构造函数采用
foo(字符串文件路径)
foo(文件文件)

我正在使用EJB,因此无法访问服务器文件系统。我所拥有的只是blob的二进制数据。是否有一种方法可以以某种方式创建指向EJB世界中的数据的文件对象,以便使用我的库?某种包装?

你可以这样做

File file = new File(path);
FileOutputStream fos = new FileOutputStream(file);
fos.write(byteArray);
fos.close();
在对文件对象调用方法createNewFile()之前,不会创建真正的文件。

您可以这样做

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

在对文件对象调用方法createNewFile()之前,不会创建真正的文件。

尽管不应在EJB环境中创建文件,更不用说通过JavaSE的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

尽管您不应该在EJB环境中创建文件,更不用说通过Java SE的File类创建一个与应用程序关联的文件夹,它可以创建一个临时文件,该文件将存储在与应用程序服务器进程关联的用户的temporary files文件夹中。例如,下面的代码片段创建一个临时文件,该文件将放置在临时文件文件夹中

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

我是否能够在不创建文件的情况下访问byte[]数据?关于您的问题,您希望有一个指向您的数据的file对象。如果您不需要File对象,您可以将其转换为ByteArrayInputStream,然后在此流上执行任何操作。“只有在您的File对象上调用方法createNewFile()才能创建真正的文件。”对不起,这是胡说八道。请您进一步解释一下,好吗@Balusci是否能够在不创建文件的情况下访问byte[]数据?关于您的问题,您希望有一个指向您的数据的file对象。如果您不需要File对象,您可以将其转换为ByteArrayInputStream,然后在此流上执行任何操作。“只有在您的File对象上调用方法createNewFile()才能创建真正的文件。”对不起,这是胡说八道。请您进一步解释一下,好吗@巴卢斯科尼:这真是一个设计糟糕的API。在他们的问题跟踪器上创建一个增强请求,其中您请求他们添加一个采用普通
InputStream
的方法。您最好的选择(给定条件)是使用
FileOutputStream
将二进制数组刷新到临时文件(即
file.createTempFile(…)
),调用库,然后删除你的临时文件…那真是一个设计糟糕的API。在他们的问题跟踪器上创建一个增强请求,其中您请求他们添加一个采用普通
InputStream
的方法。您最好的选择(给定条件)是使用
FileOutputStream
将二进制数组刷新到临时文件(即
file.createTempFile(…)
),调用库,稍后删除临时文件…欢迎使用堆栈溢出。在代码中添加一些解释可能也很有用。欢迎使用堆栈溢出。在代码中添加一些解释可能也很有用。