2017-12-19 6 views
0

Ich möchte ein Java-Programm schreiben, um eine Schnittstelle zu testen, die über XML-Dateien über SFTP kommuniziert. Die Idee der Schnittstelle ist, dass eine Seite eine XML-Datei hochlädt, dann die andere Seite sie verarbeitet, sie löscht und eine andere XML-Datei als Bestätigung hochlädt.Wie speichere ich ein FileObject von SFTP als lokale Datei?

Was mein Programm tun soll, ist eine XML-Datei hochladen, warten, bis es verschwindet, warten auf die Antwort, speichern Sie es als lokale Datei und überprüfen Sie dann die Richtigkeit der Antwort. Ich habe dies mit org.apache.commons.vfs2 und FileObjects implementiert und kann erfolgreich eine xml-Datei hochladen, warten, bis sie verschwindet und das Vorhandensein der Bestätigungsdatei prüfen. Aber sobald ich versuche, die Datei als Dokument zu analysieren, den Code mit

FileObject ackFileObject = VFS.getManager().resolveFile("sftp://[email protected]/SFTPfolder/file.xml"); 
    File ackFile = new File(ackFileObject.getName().getPath()); 
    DocumentBuilderFactory documentBuilderFactory = 
    DocumentBuilderFactory.newInstance(); 
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
    Document document = documentBuilder.parse(ackFile); 

ich eine FileNotFoundException bekommen, weil die Document die Datei von "C:/SFTPfolder/" zu lesen versucht, anstatt sie aus dem Projektpfad zu lesen. Auch "new File(ackFileObject.getName().getPath());" erstellt keine neue Datei.

Gibt es eine einfache Lösung, um dies zu beheben? Wie kann ich eine FileObject von VFS.getManager().resolveFile() als lokale Datei speichern, damit ich es als Dokument analysieren kann?

Antwort

0

Verwenden Sie copyFrom() Methode. Sie benötigen eine Fernbedienung und Ihre lokale Pfade definieren zuerst:

Sie haben bereits Ihre Remote-Datei definiert:

FileObject ackFileObject = VFS.getManager() 
        .resolveFile("sftp://[email protected]/SFTPfolder/file.xml"); 

Nun definieren Sie den Pfad zur Remote-Pfad kopieren möchten:

FileObject ackFileObjectLocal = VFS.getManager() 
        .resolveFile(localFilePath); 

Dort müssen Sie vorher localFilePath Variable einstellen oder als Konstante einstellen.

Dann nutzen: ackFileObjectLocal.copyFrom(ackFileObject, Selectors.SELECT_SELF);

So, jetzt haben Sie Ihre Datei heruntergeladen und kann es mit File-Objekt wickeln mit Ihrer Verarbeitung fortzufahren.

Verwandte Themen