使用 Apache Commons VFS RAM 文件以避免使用 API 需要文件的文件系统
Use Apache Commons VFS RAM file to avoid using file system with API requiring a file
对此有一条高度赞成的评论post:
how to create new java.io.File in memory?
其中 Sorin Postelnicu 提到使用 Apache Commons VFS RAM 文件作为将内存文件传递给需要 java.io.File 的 API 的方式(我正在解释......我希望我没有错过重点)。
基于阅读相关的 posts 我想出了这个示例代码:
@Test
public void working () throws IOException {
DefaultFileSystemManager manager = new DefaultFileSystemManager();
manager.addProvider("ram", new RamFileProvider());
manager.init();
final String rootPath = "ram://virtual";
manager.createVirtualFileSystem(rootPath);
String hello = "Hello, World!";
FileObject testFile = manager.resolveFile(rootPath + "/test.txt");
testFile.createFile();
OutputStream os = testFile.getContent().getOutputStream();
os.write(hello.getBytes());
//FileContent test = testFile.getContent();
testFile.close();
manager.close();
}
因此,我认为我有一个名为 ram://virtual/test.txt 的内存文件,其内容为 "Hello, World!"
我的问题是:如何将此文件与需要 java.io.File 的 API 一起使用?
Java 的文件 API 始终适用于本机文件系统。因此,如果文件不存在于本机文件系统中,则无法将 VFS 的 FileObject 转换为 File。
但是如果您的 API 也可以与 InputStream 一起使用,那么还有一种方法。大多数库通常都有接收 InputStreams 的重载方法。在这种情况下,以下应该有效:
InputStream is = testFile.getContent().getInputStream();
SampleAPI api = new SampleApi(is);
对此有一条高度赞成的评论post:
how to create new java.io.File in memory?
其中 Sorin Postelnicu 提到使用 Apache Commons VFS RAM 文件作为将内存文件传递给需要 java.io.File 的 API 的方式(我正在解释......我希望我没有错过重点)。
基于阅读相关的 posts 我想出了这个示例代码:
@Test
public void working () throws IOException {
DefaultFileSystemManager manager = new DefaultFileSystemManager();
manager.addProvider("ram", new RamFileProvider());
manager.init();
final String rootPath = "ram://virtual";
manager.createVirtualFileSystem(rootPath);
String hello = "Hello, World!";
FileObject testFile = manager.resolveFile(rootPath + "/test.txt");
testFile.createFile();
OutputStream os = testFile.getContent().getOutputStream();
os.write(hello.getBytes());
//FileContent test = testFile.getContent();
testFile.close();
manager.close();
}
因此,我认为我有一个名为 ram://virtual/test.txt 的内存文件,其内容为 "Hello, World!"
我的问题是:如何将此文件与需要 java.io.File 的 API 一起使用?
Java 的文件 API 始终适用于本机文件系统。因此,如果文件不存在于本机文件系统中,则无法将 VFS 的 FileObject 转换为 File。
但是如果您的 API 也可以与 InputStream 一起使用,那么还有一种方法。大多数库通常都有接收 InputStreams 的重载方法。在这种情况下,以下应该有效:
InputStream is = testFile.getContent().getInputStream();
SampleAPI api = new SampleApi(is);