Для модульных тестов я хотел бы создать файловую систему в памяти с VFS.создание виртуальной файловой системы с apache 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());
}
Мой вопрос: Является ли это правильный способ сделать это? Примеры этой вершины разрежены.
я все еще получаю сообщение журнала:
Apr 14, 2015 11:08:17 AM org.apache.commons.vfs2.VfsLog info
INFORMATION: Using "/tmp/vfs_cache" as temporary files store.
Могу ли я игнорировать это, так как я использую барана схемы URI? Я думаю, это потому, что я не настроил DefaultFileSystemManager.
Спасибо за помощь и советы!
EDIT:
Теперь с MARSCHALL memoryFileSystem:
Я скопировал пример кода с веб-сайта.
Это мой @ Тест-метод:
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
выглядит хорошо, однако: файлы и каталоги на самом деле получить созданные на жестком диске, в папке проекта. Я думал, все дело в том, чтобы избежать именно этого ...? Я что-то делаю неправильно или просто не понимаю ...?
Если вы используете Java 7+, вам следует вместо этого использовать java.nio.file; и там действительно существует [довольно хорошая реализация в памяти] (https://github.com/marschall/memoryfilesystem). – fge
Спасибо за ответ! Каковы преимущества? – user3629892
Многие; в основном, вы просто используете стандартный java.nio.file API для манипуляции с ними в нем, как и файлы на локальном диске. – fge