gpt4 book ai didi

java - 在 Java 中将 MemoryFileSystem 链接到普通文件系统

转载 作者:行者123 更新时间:2023-12-02 02:37:11 28 4
gpt4 key购买 nike

我有一个由 MemoryFileSystem 生成的文件系统。我希望在真实文件系统中有一个文件夹“映射”到内存文件系统中的文件夹,因此在任一文件系统中创建的任何文件都只是真正写入内存而不是磁盘。在谈论此类事情时,我听说过“符号链接(symbolic link)”这个术语,但我不完全确定这是否就是我想要做的。有没有有效的方法来实现这一点?

我尝试过 Files.createSymbolicLink(memoryRootPath, realFolderPath); 但这给了我这个错误:

Exception in thread "main" java.nio.file.ProviderMismatchException: expected a path of provider memory but got file

谢谢!

最佳答案

首先,您试图以错误的方向创建符号链接(symbolic link)。如果您希望真实文件系统中的文件“映射”到内存文件系统,那么符号链接(symbolic link)应该位于指向内存文件系统的真实文件系统中。

但这是不可能的。

真正的文件系统是由操作系统实现的,它对内存文件系统一无所知。这意味着操作系统将无法解析符号链接(symbolic link)。符号链接(symbolic link)(在真实文件系统中)必须引用操作系统知道的文件系统中的某些内容。

如果您想实现这样的功能,则需要使用操作系统能够理解的文件系统来完成。例如,在 Linux 上,您可以创建一个由内存/虚拟内存支持的“tmpfs”文件系统。然后,您可以将其挂载到常规目录上,并从常规文件系统创建指向 tempfs 中的文件或目录的符号链接(symbolic link)。当您重新启动系统时,临时文件系统将被破坏。

<小时/>

在您的案例中出现该异常的原因是 MemoryFileSystem 的实现限制。这是设计使然。

private AbstractPath castPath(Path path) {
if (!(path instanceof AbstractPath)) {
throw new ProviderMismatchException("expected a path of provider " +
SCHEME + " but got " + path.getFileSystem().provider().getScheme());
}
return (AbstractPath) path;
}

理论上,应该可以使符号链接(symbolic link)从 MemoryFileSystem 工作到真实文件系统,但是:

  • 您需要 fork MemoryFileSystem,并且
  • 我认为它不会实现您想要做的事情。

关于java - 在 Java 中将 MemoryFileSystem 链接到普通文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46126351/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com