- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想使用 Google 的 JIMFS 创建一个用于测试的虚拟文件系统。不过,我很难开始。
我看了这个教程:http://www.hascode.com/2015/03/creating-in-memory-file-systems-with-googles-jimfs/
但是,当我创建文件系统时,它实际上是在现有文件系统中创建的,即。 e.我做不到:
Files.createDirectory("/virtualfolder");
因为我被拒绝访问。
我错过了什么吗?
目前,我的代码看起来像这样:
测试类:
FileSystem fs = Jimfs.newFileSystem(Configuration.unix());
Path vTargetFolder = fs.getPath("/Store/homes/linux/abc/virtual");
TestedClass test = new TestedClass(vTargetFolder.toAbsolutePath().toString());
某处的 Java 类:
targetPath = Paths.get(targetName);
Files.createDirectory(targetPath);
// etc., creating files and writing them to the target directory
但是,我创建了一个单独的类来测试 JIMFS,这里目录的创建没有失败,但是我不能像这样创建一个新文件:
FileSystem fs = Jimfs.newFileSystem(Configuration.unix());
Path data = fs.getPath("/virtual");
Path dir = Files.createDirectory(data);
Path file = Files.createFile(Paths.get(dir + "/abc.txt")); // throws NoSuchFileException
我做错了什么?
最佳答案
问题是默认文件系统和新文件系统的混合。
Files.createDirectory("/virtualfolder");
这实际上不会编译,所以我怀疑你的意思是:
Files.createDirectory( Paths.get("/virtualfolder"));
这会尝试在默认文件系统的根目录中创建一个目录。您需要特权才能执行此操作,并且可能不应该将其作为测试来执行。我怀疑你试图通过使用字符串来解决这个问题并遇到了
让我们看一下您的代码并添加注释
FileSystem fs = Jimfs.newFileSystem(Configuration.unix());
// now get path in the new FileSystem
Path data = fs.getPath("/virtual");
// create a directory in the new FileSystem
Path dir = Files.createDirectory(data);
// create a file in the default FileSystem
// with a parent that was never created there
Path file = Files.createFile(Paths.get(dir + "/abc.txt")); // throws NoSuchFileException
让我们看最后一行:
dir + "/abc.txt" >> is the string "/virtual/abc.txt"
Paths.get(dir + "/abc.txt") >> is this as path in the default filesystem
请记住,虚拟文件系统与默认文件系统平行存在。路径有一个文件系统,不能在其他文件系统中使用。它们不仅仅是名称。
注意事项:
使用虚拟文件系统时避免使用 Paths 类。此类将始终在默认文件系统中工作。文件没问题,因为您首先在正确的文件系统中创建了路径。
如果您最初的计划是使用安装到默认文件系统的虚拟文件系统,则您需要更多。我有一个项目,在该项目中,我创建了一个基于虚拟文件系统的 Webdav 服务器,然后使用 OS 内置方法将其挂载为一个卷。
关于java - 使用 JIMFS 创建虚拟文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29561087/
我开始使用 google jimfs,但我不明白如何从路径获取文件。在源代码中,我看到 Path.toFile 抛出 UnsupportedOperationException。但是没有文件我怎么能使
我有一个特定的用例,将普通文件系统抽象为内存文件系统对我有好处,因为我们经常出于性能原因在两者之间切换。JIMFS 可以在生产环境中使用还是纯粹用于测试? 最佳答案 没有什么特别的原因它不能用于生产。
我已经使用 JIMFS 创建了一个 VFS。 FileSystem virtualFS = Jimfs.newFileSystem(Configuration.unix()); Path virtua
我开始使用 google jimfs 并执行 ls 我发现在 FS 的根目录中有工作目录。这个文件夹的用途是什么? 最佳答案 它只是一个任意目录,因此工作目录(相对路径解析所依据的目录)不是根目录,因
我在测试中使用 Jimfs,如下所示: public class FooTest { private FileSystem fs = Jimfs.newFileSystem(Configurati
我在 jimfs 中创建了一个 zip 文件(内存文件系统中的谷歌)来自字节数组。尝试使用 ZipMemoryFileSystem 打开该文件时,我收到无法识别提供者的错误。我的代码如下: publi
我想使用 Google 的 JIMFS 创建一个用于测试的虚拟文件系统。不过,我很难开始。 我看了这个教程:http://www.hascode.com/2015/03/creating-in-mem
我正在尝试在 Jimfs 文件系统中创建一个目录(使用 Ceylon 的文件模块),但是当从 Ceylon 访问文件系统时,我遇到了 Jimfs 提供程序未安装的问题。 这是我的测试程序: // Fi
我有文件相关的代码来测试我想在哪里测试我无法读取的现有文件的错误处理。 class SomeClass { //... public void load(Path path) {
如何使用 jimfs 设置文件的最后修改日期?我有……像这样: final FileSystem fileSystem = Jimfs.newFileSystem(Configuration.unix
我是一名优秀的程序员,十分优秀!