gpt4 book ai didi

java - WebDAV FileSystemProvider - Java NIO

转载 作者:行者123 更新时间:2023-12-01 09:16:14 47 4
gpt4 key购买 nike

我有一个 Java 应用程序,其中包含许多 NIO 方法,例如 Files.copyFiles.moveFiles.delete文件 channel ...

我现在想要实现的目标:我想访问远程 WebDAV 服务器并使用上传、删除或更新远程 WebDAV 数据等基本功能修改该服务器上的数据 - 而不更改我的应用程序上的每个方法。所以这是我的想法:

我认为 WebDAV 文件系统实现可以解决这个问题。添加自定义 WebDAV FileSystemProvider,用于管理远程数据上提到的文件操作。我在 google 上搜索了很多,带有 Sardine 实现的 Apache VFS 看起来不错 - 但似乎 Apache VFS 与 NIO 不兼容?

这是一些示例代码,正如我想象的那样:

public class WebDAVManagerTest {

private static DefaultFileSystemManager fsManager;

private static WebdavFileObject testFile1;
private static WebdavFileObject testFile2;

private static FileSystem webDAVFileSystem1;
private static FileSystem webDAVFileSystem2;

@Before
public static void initWebDAVFileSystem(String webDAVServerURL) throws FileSystemException, org.apache.commons.vfs2.FileSystemException {

try {
fsManager = new DefaultFileSystemManager();
fsManager.addProvider("webdav", new WebdavFileProvider());
fsManager.addProvider("file", new DefaultLocalFileProvider());
fsManager.init();
} catch (org.apache.commons.vfs2.FileSystemException e) {
throw new FileSystemException("Exception initializing DefaultFileSystemManager: " + e.getMessage());
}

String exampleRemoteFile1 = "/foo/bar1.txt";
String exampleRemoteFile2 = "/foo/bar2.txt";

testFile1 = (WebdavFileObject) fsManager.resolveFile(webDAVServerURL + exampleRemoteFile1);
webDAVFileSystem1 = (FileSystem) fsManager.createFileSystem(testFile1);
Path localPath1 = webDAVFileSystem1.getPath(testFile1.toString());

testFile2 = (WebdavFileObject) fsManager.resolveFile(webDAVServerURL + exampleRemoteFile2);
webDAVFileSystem2 = (FileSystem) fsManager.createFileSystem(testFile2);
Path localPath2 = webDAVFileSystem1.getPath(testFile1.toString());

}
}

之后,我想在我的应用程序中使用 localPath1 + localPath2。所以例如Files.copy(localPath1, newRemotePath) 会将 WebDAV 服务器上的文件复制到新目录。

这是正确的做法吗?或者还有其他库可以实现这一点吗?

最佳答案

Apache VFS 使用它自己的文件系统接口(interface),而不是 NIO 接口(interface)。您有三种选择,需要付出不同的努力。

  1. 更改您的代码以使用现有的 webdav 项目,该项目使用其自己的文件系统,即 Apache VFS。
  2. 查找使用 webdav 并实现 NIO 文件系统等的现有项目。
  3. 自行实现 NIO FileSystem 接口(interface)。

选项 3 已经完成,因此您可以自定义其他人已经编写的内容,请查看 nio-fs-providernio-fs-webdav 。我确信还有其他的,但是使用 Google 很容易找到这两个。

从头开始实现 WebDav NIO 文件系统需要大量工作,因此我不建议从这里开始,我可能会采用某人所做的事情并使其为我工作,即选项 2。

关于java - WebDAV FileSystemProvider - Java NIO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40527347/

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