使用Apache Commons VFS RAM文件来避免将文件系统与需要文件的API一起使用

时间:2019-09-27 20:03:47

标签: java apache-commons-vfs

对此帖子有很高的评价:

how to create new java.io.File in memory?

Sorin Postelnicu在其中提到使用Apache Commons VFS RAM文件作为将内存文件传递给需要java.io.File的API的一种方式(我在解释……我希望我不会错过重点)。

根据阅读相关文章,我得出了以下示例代码:

    @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一起使用?

1 个答案:

答案 0 :(得分:1)

Java的File API始终与本机文件系统一起使用。因此,如果没有文件存在于本机文件系统上,就无法将VFS的FileObject转换为File。

但是有一种方法可以让您的API也可以与InputStream一起使用。大多数库通常都有接受InputStreams的重载方法。在这种情况下,应该可以进行以下操作:

InputStream is = testFile.getContent().getInputStream();
SampleAPI api = new SampleApi(is);