首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebDAV FileSystemProvider - Java

WebDAV FileSystemProvider - Java
EN

Stack Overflow用户
提问于 2016-11-10 12:12:47
回答 1查看 917关注 0票数 0

我有一个有很多NIO方法的Java应用程序,比如Files.copyFiles.moveFiles.deleteFileChannel.

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

我认为WebDAV FileSystem实现可以做到这一点。添加自定义的WebDAV FileSystemProvider,用于管理远程数据上提到的文件操作。我已经搜索了很多,而且带有Sardine实现的Apache看起来不错,但是Apache似乎与NIO不兼容吗?

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

代码语言:javascript
复制
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服务器上的文件复制到一个新目录中。

这是正确的行动方针吗?或者还有其他库来实现这一目标?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-07 20:07:00

Apache使用它自己的FileSystem接口,而不是NIO接口。您有三个选择,不同的努力水平。

  1. 将代码更改为使用现有的webdav项目,该项目使用自己的FileSystem,即Apache。
  2. 找到一个使用webdav并实现NIO、FileSystem等的现有项目。
  3. 自己实现NIO FileSystem接口。

选项3已经完成,因此您可以自定义其他人已经编写的内容,查看nio-fs-提供者nio webdav。我肯定还有其他的,但这两个很容易在谷歌上找到。

从零开始实现WebDav NIO FileSystem将是相当多的工作,所以我不建议从那里开始,我可能会接受别人已经做过的事情,并使它为我(即选项2 )工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40527347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档