使用apache VFS创建虚拟文件系统

时间:2015-04-14 09:21:36

标签: java

对于单元测试,我想创建一个带VFS的内存文件系统。

我目前的代码:

final String ROOTPATH = "ram://virtual";

        FileSystemManager fsManager = VFS.getManager();
        fsManager.createVirtualFileSystem(ROOTPATH);
        FileObject testFile = fsManager.resolveFile(ROOTPATH + "/test.txt");
        testFile.createFile();

        FileObject testFile2 = fsManager.resolveFile(ROOTPATH + "/test2.txt");
        testFile2.createFile();

        FileObject testFile3 = fsManager.resolveFile(ROOTPATH + "/test3.txt");
        testFile3.createFile();

        FileObject testFile4 = fsManager.resolveFile(ROOTPATH + "/test4.txt");
        testFile4.createFile();

        FileObject folder = fsManager.resolveFile(ROOTPATH);
        FileObject[] files = folder.getChildren();
        for (FileObject file : files) {
            System.out.println(file.getName());
        }

我的问题:这是正确的方法吗?这个topica上的例子很稀疏。

我仍然收到日志消息:

Apr 14, 2015 11:08:17 AM org.apache.commons.vfs2.VfsLog info
INFORMATION: Using "/tmp/vfs_cache" as temporary files store.

我可以忽略这个,因为我使用的是ram URI方案吗?我想这是因为我没有配置DefaultFileSystemManager。

感谢您的帮助和提示!

编辑:

现在使用marschall memoryFileSystem:

我从他们的网站复制了示例代码。

这是我的@ Test-Method:

FileSystem fileSystem = this.rule.getFileSystem();

Path testDirectoryPath  = Paths.get("test");
Files.createDirectories(testDirectoryPath);
Path p = fileSystem.getPath("test");
System.out.println(p.getFileName());
System.out.println(p.getFileSystem());

Path testfile = Paths.get("test/text2.txt");
Path test = Files.createFile(testfile);
Path f = fileSystem.getPath("test/text2.txt");
System.out.println(f.getFileName());
System.out.println(f.getFileSystem());
System.out.println(f.toAbsolutePath());

这是控制台输出:

test
MemoryFileSystem[VirtualTestFileSystem]
text2.txt
MemoryFileSystem[VirtualTestFileSystem]
/test/text2.txt

看起来没问题:文件和目录实际上是在我的硬盘驱动器上,在项目文件夹中创建的。我想,这一点的全部意义是要避免那个......?我做错了什么,或者我没有得到它......?

1 个答案:

答案 0 :(得分:0)

您正在使用Paths.get

Path testDirectoryPath  = Paths.get("test");

Paths.get始终在默认文件系统上创建路径。你应该使用

Path testDirectoryPath  =  fileSystem.getPath("test");