使用 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);