У меня есть приложение Java с большим количеством NIO методов, такими как Files.copy
, Files.move
, Files.delete
, FileChannel
...WebDAV FileSystemProvider - Java NIO
То, что я сейчас пытаюсь достичь: Я хочу получить доступ к удаленному серверу WebDAV и изменять данные на этом сервере с такими основными функциями, как загрузка, удаление или обновление удаленных данных WebDAV - без изменения каждого метода в моем приложении. Итак, вот моя идея:
Я думаю, что реализация WebDAV FileSystem сделала бы трюк. Добавление настраиваемого WebDAV FileSystemProvider, который управляет упомянутыми файловыми операциями на удаленных данных. Я много googled, и Apache VFS с реализацией Sardine выглядит хорошо - НО кажется, что 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 в новый каталог.
Действительно ли это правильный курс? Или есть другие библиотеки для достижения этого?