WebDAV FileSystemProvider - Java NIO
WebDAV FileSystemProvider - Java NIO
我有一个 Java 应用程序,其中包含许多 NIO 方法,例如 Files.copy
、Files.move
、Files.delete
、FileChannel
...
我现在想要实现的目标:我想访问远程 WebDAV 服务器并使用上传、删除或更新远程 WebDAV 数据等基本功能修改该服务器上的数据,而无需更改应用程序中的所有方法。所以这是我的想法:
我认为 WebDAV 文件系统实现可以解决问题。添加一个自定义的 WebDAV FileSystemProvider,它管理上述对远程数据的文件操作。我在谷歌上搜索了很多,带有 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。所以例如a Files.copy(localPath1, newRemotePath) 会将 WebDAV 服务器上的文件复制到新目录。
这是正确的做法吗?或者有其他库可以实现吗?
Apache VFS 使用它自己的文件系统接口而不是 NIO 接口。您有三种选择,需要付出不同程度的努力。
- 更改代码以使用现有的 webdav 项目,该项目使用自己的文件系统,即 Apache VFS。
- 找到一个使用webdav并实现NIO FileSystem等的现有项目
- 自己实现NIO FileSystem接口
选项 3 已经完成,因此您可以自定义其他人已经编写的内容,请查看 nio-fs-provider or nio-fs-webdav。我敢肯定还有其他人,但是使用 Google.
很容易找到这两个
从头开始实施 WebDav NIO 文件系统需要大量工作,所以我不建议从那里开始,我可能会采用别人所做的并使它对我有用,即选项 2。
我有一个 Java 应用程序,其中包含许多 NIO 方法,例如 Files.copy
、Files.move
、Files.delete
、FileChannel
...
我现在想要实现的目标:我想访问远程 WebDAV 服务器并使用上传、删除或更新远程 WebDAV 数据等基本功能修改该服务器上的数据,而无需更改应用程序中的所有方法。所以这是我的想法:
我认为 WebDAV 文件系统实现可以解决问题。添加一个自定义的 WebDAV FileSystemProvider,它管理上述对远程数据的文件操作。我在谷歌上搜索了很多,带有 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。所以例如a Files.copy(localPath1, newRemotePath) 会将 WebDAV 服务器上的文件复制到新目录。
这是正确的做法吗?或者有其他库可以实现吗?
Apache VFS 使用它自己的文件系统接口而不是 NIO 接口。您有三种选择,需要付出不同程度的努力。
- 更改代码以使用现有的 webdav 项目,该项目使用自己的文件系统,即 Apache VFS。
- 找到一个使用webdav并实现NIO FileSystem等的现有项目
- 自己实现NIO FileSystem接口
选项 3 已经完成,因此您可以自定义其他人已经编写的内容,请查看 nio-fs-provider or nio-fs-webdav。我敢肯定还有其他人,但是使用 Google.
很容易找到这两个从头开始实施 WebDav NIO 文件系统需要大量工作,所以我不建议从那里开始,我可能会采用别人所做的并使它对我有用,即选项 2。