ich mit vielen NIO Methoden wie Files.copy
eine Java-Anwendung haben, Files.move
, Files.delete
, FileChannel
...WebDAV FileSystemProvider - Java NIO
Was ich jetzt zu erreichen versuchen: Ich möchte einen Remote-WebDAV-Server zugreifen und diese ändern Daten auf diesem Server mit den grundlegenden Funktionen wie Upload, Löschen oder Aktualisieren der Remote-WebDAV-Daten - ohne jede Methode in meiner Anwendung zu ändern. Also hier kommt meine Idee:
Ich denke, eine WebDAV FileSystem-Implementierung würde den Trick tun. Hinzufügen eines benutzerdefinierten WebDAV-FileSystemProvider, der die genannten Dateioperationen auf den Remote-Daten verwaltet. Ich habe viel gegooglet und das Apache VFS mit Sardine-Implementierung sieht gut aus - ABER es scheint, dass das Apache VFS nicht mit NIO kompatibel ist?
Hier einige Beispiel-Code, wie ich es mir vorstelle:
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());
}
}
Danach habe ich mit localPath1 + localPath2 in meiner Anwendung arbeiten möchten. So dass z.B. Eine Files.copy (localPath1, newRemotePath) würde eine Datei auf dem WebDAV-Server in ein neues Verzeichnis kopieren.
Ist dies die richtige Vorgehensweise? Oder gibt es andere Bibliotheken, um das zu erreichen?