WebDAV FileSystemProvider - Java NIO

时间:2016-11-10 12:12:48

标签: java filesystems nio webdav

我有一个包含许多NIO方法的Java应用程序,例如Files.copyFiles.moveFiles.deleteFileChannel ......

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

我认为WebDAV FileSystem实现可以解决问题。添加自定义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服务器上的文件复制到新目录。

这是正确的行动方案吗?或者还有其他库可以实现吗?

1 个答案:

答案 0 :(得分:1)

Apache VFS使用它自己的FileSystem接口而不是NIO接口。你有三种不同程度的选择。

  1. 更改您的代码以使用现有的webdav项目,该项目使用它自己的FileSystem即Apache VFS。
  2. 查找使用webdav并实现NIO FileSystem等的现有项目。
  3. 自己实现NIO FileSystem接口。
  4. 选项3已经完成,因此您可以自定义其他人已撰写的内容,查看nio-fs-providernio-fs-webdav。我确定还有其他人,但使用Google很容易找到这两个。

    从头开始实施WebDav NIO文件系统需要做很多工作,所以我不建议从那里开始,我可能会采取某些人所做的工作并为我做这项工作,即选项2。 / p>