2015-04-14 4 views
2

Для модульных тестов я хотел бы создать файловую систему в памяти с 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 

выглядит хорошо, однако: файлы и каталоги на самом деле получить созданные на жестком диске, в папке проекта. Я думал, все дело в том, чтобы избежать именно этого ...? Я что-то делаю неправильно или просто не понимаю ...?

+0

Если вы используете Java 7+, вам следует вместо этого использовать java.nio.file; и там действительно существует [довольно хорошая реализация в памяти] (https://github.com/marschall/memoryfilesystem). – fge

+0

Спасибо за ответ! Каковы преимущества? – user3629892

+0

Многие; в основном, вы просто используете стандартный java.nio.file API для манипуляции с ними в нем, как и файлы на локальном диске. – fge

ответ

0

Вы используете Paths.get

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

Paths.get всегда создает пути на файловой системы по умолчанию. Вы должны использовать

Path testDirectoryPath = fileSystem.getPath("test"); 
Смежные вопросы