Herangehensweise: FTP-Transfer von Verzeichnis

Status
Nicht offen für weitere Antworten.

jollyroger

Bekanntes Mitglied
Moin moin,

mir geht es hier weniger um eine komplette Implementierung sondern eher um die beste Herangehensweise.


Zur Vorgeschichte:


Ich möchte folgendes realisieren:

Eine Java-Applikation, die periodisch Verzeichnisse scannt und dann - abhängig von Filenamens-Mustern - diese Dateien auf einen FTP-Server übertragt.

Da diese Applikation teil einer größeren ist, ist periodisches Scannen usw (mittels Quartz etc) schon erledigt, mir geht es hier nur um den FTP-Transfer als solches.

Ich verwende dazu das org.apache.commons.net-Paket.

Zur Frage:

Soweit ich das nun überblicken kann, bietet org.apache.commons.net keine Möglichkeit komplette Verzeichnisse zu übertragen.
Dabei kann das ja ganz schön "tricky" werden.

Verzeichnis einlesen, ggf. auf dem Server anlegen, rekursiv durchgehen, die ganze Strukturen dabei merken usw.

Ich denke mal mit error-handling usw. wird das doch recht schnell komplex und damit fehleranfällig.

Wie würdet ihr an so was herangehen? Gibt es noch gute Bibliotheken die mir z.B. das rekursive Traversieren von Verzeichnissen abnehmen?

DirectoryWalker aus org.apache.commons.io sieht ja recht vielversprechend aus, gibt es evtl. noch Libs die mir noch etwas mehr abnehmen können?

-> http://www.jscape.com/sftp/index.html bietet genau was ich will, kostet aber leider Geld was nicht mehr im Budget ist....

Any ideas?
 

SnooP

Top Contributor
Wenn man Rekursion verstanden hat, sollte das ganze ein greifbares Problem sein ehrlich gesagt ;) ... dadurch, dass Verzeichnisstrukturen immer einfache Baumstrukturen sind und du keine Zyklen etc. hast, kann man das doch relativ einfach erledigen.

Meines Wissens kann FTP selbst auch gar nicht sowas wie Verzeichnisse übertragen, sondern macht immer alles einzeln (erkennbar auch bei den clients, die das verzeichnis übertragen und dann nach und nach alle subcontents).

Wenn du den Transfer in eine Transaktion gießt, dann kannst du auch alles wieder einsammeln ;) .. letztlich brauchst du auch eine Funktion zum rekursiven Verzeichnisse löschen, was im Fehlerfall losgeht, um unvollständig übertragene Daten wieder zu killen.
 

jollyroger

Bekanntes Mitglied
Ja, Rekursion usw ist nicht "das" Problem, ich denke halt nur das es doch recht viel Code wird.

Generell nehme ich dann lieber Komponenten bei denen man davon ausgehen kann, das sie bugfrei sind.

Es wäre halt schon gewesen, eine API zu haben, die sowas bietet wie:

Code:
public void upload(String localdir, String remoteDir) throws.....

bzw.

Code:
public void download(String localdir, String remoteDir) throws.....

Da ich allerdings weder über google noch bei sourceforge etwas gefunden habe, was:

-> nicht steinalt ist
-> kostenlos ist und open-source

werde ich das wohl doch selber implementieren müssen.

Evtl. kennt noch jemand eine gute Alternative zum selber implementieren?
 

Leroy42

Top Contributor
Prinzipielle Vorgehensweise:
Code:
public void upload(String localdir, String remoteDir) {upload(new File(localdir), remoteDir);}
public void upload(File localdir, String remoteDir) {
  // wenn remoteDir nicht existiert ==> anlegen
  for (File f : localDir.listFiles())
    if (f.isDirectory())
      upload(f, remoteDir+"/"+f.name());
    else
      // f auf remoteDir+"/"+f.name() uploaden
}

Das downloaden ist etwas komplizierter, da es bei
FTP kein listFiles() gibt und man sich das selbst basteln muss.
 

jollyroger

Bekanntes Mitglied
Leute,

danke erst mal für die Hinweise....

Ich bin etwas überrascht, ich hätte gedacht da gäbe es schon was....

Aktuell stehe ich vor folgendem Problem:

Wie krieg ich denn bei einem download vorher raus, ob die Datei ASCII oder binär ist?

Ich gehe doch recht in der Annahme, das eine im Binär-Mode runtergeladene Datei futsch ist und umgedreht eben so, oder?

Irgendwie sehe ich beim Jakarta-Client keine Möglichkeit das vorher festzustellen, wahrscheinlich geht das auch nicht?

Wie machen das dann ftp-clients? Die setzen das doch auch ohne Zutun, und ich hab noch nie erlebt, das da eine Datei futsch war.....
 

Murray

Top Contributor
jollyroger hat gesagt.:
Wie krieg ich denn bei einem download vorher raus, ob die Datei ASCII oder binär ist?
Wenn man das einer Datei "ansehen" könnte, dann würde das sicherlich im Protokoll bereits behandelt werden - man muss das vor dem Transfer angeben, weil das eben nur der Anwender wissen kann.

jollyroger hat gesagt.:
Ich gehe doch recht in der Annahme, das eine im Binär-Mode runtergeladene Datei futsch ist und umgedreht eben so, oder?
Der Binärmodus bei FTP bedeutet, dass die Datei unverändert übertragen wird (das will man in den allermeisten Fällen); auch reine Textdateien kann man ruhig so übertragen.
 

jollyroger

Bekanntes Mitglied
Der Binärmodus bei FTP bedeutet, dass die Datei unverändert übertragen wird (das will man in den allermeisten Fällen); auch reine Textdateien kann man ruhig so übertragen.

Hui!

Vielen Dank für die Aufklärung, dann bin ich ja beruhigt.... :wink:

Dennoch stellt sich mir dann die Frage: Wieso kann / sollte man dann überhaupt was am Übertragungsmodus ändern?
Anders formuliert: Wenn der Binärmodus bei FTP bedeutet, dass die Datei unverändert übertragen wird, wieso gibt es dann überhaupt sowas wie ASCII-Modus?

Ich möchte doch, das die Datei durch die Übertragung eben nicht verändert wird, oder sehe ich hier was falsch?
 

jollyroger

Bekanntes Mitglied
Der Binärmodus bei FTP bedeutet, dass die Datei unverändert übertragen wird (das will man in den allermeisten Fällen); auch reine Textdateien kann man ruhig so übertragen.

Hui!

Vielen Dank für die Aufklärung, dann bin ich ja beruhigt.... :wink:

Dennoch stellt sich mir dann die Frage: Wieso kann / sollte man dann überhaupt was am Übertragungsmodus ändern?
Anders formuliert: Wenn der Binärmodus bei FTP bedeutet, dass die Datei unverändert übertragen wird, wieso gibt es dann überhaupt sowas wie ASCII-Modus?

Ich möchte doch, das die Datei durch die Übertragung eben nicht verändert wird, oder sehe ich hier was falsch?
 

Murray

Top Contributor
Bin jetzt kein Experte für das FTP-Protokoll, aber m.w. werden im ASCII-Modus die unterschiedlichen Zeilentrenner- und Dateiende-Zeichen automatisch angepasst (sofern Client und Server auf unterschiedlichen Betriebssystemen laufen). Außerdem macht man sich die Tatsache zunutze, dass ein ASCII-Zeichen mit 7 Bit dargestellt werden kann, so dass im Text-Modus das höchstwertige Bit nicht mit übertragen werden muss; man kommt also mit etwas weniger Traffic aus.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Allgemeine Herangehensweise bei Übernahme Allgemeine Java-Themen 19
J Herangehensweise an ein Projekt? Allgemeine Java-Themen 11
Avalon Data Transfer Objekte aus Datenbank erstellen Allgemeine Java-Themen 8
J Transfer von Integer zwischen zwei Clients - RMI Allgemeine Java-Themen 4
J Sinnvolle Dateigroesse fuer PDAS-Transfer Allgemeine Java-Themen 2
G http maximale transfer größe? Allgemeine Java-Themen 3
N FTP-Transfer Allgemeine Java-Themen 6
S Verzeichnis schreibzugriffe erlaubt unabhängig von ACL und Posix Allgemeine Java-Themen 11
T Geeignetes Verzeichnis Allgemeine Java-Themen 5
P Wofür ist das Verzeichnis $HOME/.oracle_jre_usage? Allgemeine Java-Themen 3
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
K NetBeans Ordner bei 'Clean&Build' automatisch in dist Verzeichnis kopieren Allgemeine Java-Themen 0
C Verzeichnis ins JMenu einlesen Allgemeine Java-Themen 2
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
C Umgebungsvariable Java-Datei in anderem Verzeichnis ausführen Allgemeine Java-Themen 2
K [Refactoring] ClassLoader Verzeichnis durchsuchen lassen Allgemeine Java-Themen 7
R Welches User-Verzeichnis wählen für Configurationsdateien - Windows Allgemeine Java-Themen 2
R Änderungen in einem Verzeichnis beobachten - Windows Allgemeine Java-Themen 3
S Aus executable jar Verzeichnis erstellen Allgemeine Java-Themen 8
reibi Leeres Verzeichnis in ein Zipfile einfügen Allgemeine Java-Themen 12
reibi Schreibrechte auf ein Verzeichnis Allgemeine Java-Themen 3
G Log4J Verzeichnis der Log-Datei konfigurieren Allgemeine Java-Themen 8
A Drucken ändert aktuelles Verzeichnis Allgemeine Java-Themen 2
reibi Aktuelles Verzeichnis in den Klassenpfad nehmen Allgemeine Java-Themen 9
T Eclipse Dateien einzeln aus einem Verzeichnis laden! Allgemeine Java-Themen 6
B ObjectOutputStream verzeichnis wählen Allgemeine Java-Themen 8
Benji0815 Verzeichnis wie im Windows Explorer in einem JTree anzeigen Allgemeine Java-Themen 6
L Applet Verzeichnis lesen Allgemeine Java-Themen 3
B Verzeichnis durchsuchen geschwindigkeit optimieren Allgemeine Java-Themen 6
B in welchem verzeichnis liegen alle installierten klassen? Allgemeine Java-Themen 6
G Klassen aus Verzeichnis laden Allgemeine Java-Themen 13
S Aktuelles Verzeichnis - CMD/Kommandozeilenproblem Allgemeine Java-Themen 9
G Zwischen Datei und Verzeichnis unterscheiden. Allgemeine Java-Themen 11
C Velocity liest template-Dateien nicht aus einem Verzeichnis Allgemeine Java-Themen 3
heart_disease Verzeichnis-Probleme mit ZIP Allgemeine Java-Themen 4
M Verzeichnis durchlaufen und Dateien umbennen Allgemeine Java-Themen 2
P Verzeichnis in JAR-Datei durchgehen Allgemeine Java-Themen 2
G Dateien und Verzeichnisse in einem Verzeichnis zählen Allgemeine Java-Themen 9
W Verzeichnis für Benutzerfiles Allgemeine Java-Themen 7
S Ist File ein root-Verzeichnis? Allgemeine Java-Themen 2
G Java Klasse in einem anderen Verzeichnis aufrufen Allgemeine Java-Themen 3
H mit javac Verzeichnis kompilieren Allgemeine Java-Themen 2
E Existierendes Verzeichnis nicht gefunden Allgemeine Java-Themen 4
M Verzeichnis auslesen - Fehler in isDirectory()? Allgemeine Java-Themen 4
F Verzeichnis, in dem sich die ausführende jar Datei befindet Allgemeine Java-Themen 9
K Verzeichnis rekursiv aus JAR-Datei extrahieren Allgemeine Java-Themen 6
O Ein Verzeichnis aus der Root ablesen/Dateitypen registrieren Allgemeine Java-Themen 5
P Verzeichnis auwählen Allgemeine Java-Themen 2
S Starten einer Anwendung von einem anderen Verzeichnis Allgemeine Java-Themen 3
P Mit getResource() ein ganzes Verzeichnis laden Allgemeine Java-Themen 5
T Verzeichnis der Klasse Allgemeine Java-Themen 7
J Verzeichnis aus meinem JAR auslesen und abspeichern. Allgemeine Java-Themen 2
G Verzeichnis löschen? Allgemeine Java-Themen 3
W Aktuelles Verzeichnis rausfinden Allgemeine Java-Themen 13
S Probleme mit dem Compilieren von Dateien in Verzeichnis Allgemeine Java-Themen 4
G Dateien zählen im Verzeichnis Allgemeine Java-Themen 11
G aktuelles Verzeichnis Allgemeine Java-Themen 2
A Verzeichnis auflisten - auch innerhalb eines Jars Allgemeine Java-Themen 6
G Verzeichnis überwachen Allgemeine Java-Themen 13
S Temporäres Verzeichnis anlegen? Allgemeine Java-Themen 4
G Java Runtime Verzeichnis ermitteln Allgemeine Java-Themen 3
S dringend-verzeichnis von festplatte einlesen Allgemeine Java-Themen 9
P Dateinamen testen? Schreibrechte auf Verzeichnis testen? Allgemeine Java-Themen 8
M Verzeichnis verschieben? Allgemeine Java-Themen 2
G Bestimmte Dateien aus Verzeichnis löschen Allgemeine Java-Themen 5
S Programm starten mit Runtime aktuelles Verzeichnis wechseln Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben