[Java] SFTP Client

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von unix, 7. Dezember 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 7. Dezember 2010
    SFTP Client

    Hey, ich muss ein Programm schreiben, welches über SFTP daten auf nem Server synchronisiert.

    Hab bis jetzt das JSCH Zeug von JCraft verwendet, hat auch fast alles geklappt.

    Aber: Das Programm soll überprüfen können ob eine gleichnamige Datei auf dem Server, möglicherweise in einer neuen Version vorliegt und dann die neue umbenennen und dann erst hochladen.

    Hört sich easy going an, aber ich hab Stress bei der Überprüfung ob die Dateien gleich sind oder unterschiedlich.

    Eine Lösung wäre, die Datei vom Server zu laden, dann ne Checksum zu bilden von beiden und danach halt vergleichen ob Sie gleich sind. Das bringt aber zu viel Traffic!!

    Nen anderer Gedanke war, dass man sich das Änderungsdatum der Datei vom Server ausgibt und dann mit dem Datum der lokalen Datei vergleicht. Das sollte die Lösung sein, jedoch bietet dieses JSch Zeug keine Methode mit der ich mir nur das Änderungsdatum ausgeben lassen kann, sondern alle Attribute per String.


    Hat einer vllt. ne andere Idee oder nen Tipp für ne andere SFTP API.

    Ach btw ^^

    SFTP != FTPS

    Habs auch mit Apache FTPSClient versucht gehabt, funzt echt nicht

    Hab noch ne Idee, man könnte auch die Dateiinformationen vom Server welche als String so rüberkommen:

    parsen und dann die jeweiligen Informationen verarbeiten.
    Ist zwar etwas aufwendig, aber vllt. kennt einer schon Methoden oder Klassen mit denen sowas möglich ist, damit ich das Rad nicht neu erfinden muss.

    Mein Chef meinte in Python is sowas möglich, also müsst des auch in Java möglich sein! ^^
     
  2. 7. Dezember 2010
    AW: SFTP Client

    Mit dem richtigen Format-String sollte das kein Problem darstellen:
    http://download.oracle.com/javase/1.4.2/docs/api/java/text/DateFormat.html#parse(java.lang.String)
     
  3. 8. Dezember 2010
    AW: SFTP Client

    Oh ja, das is genau das, was ich gesucht hab!

    aber ich hab noch etwas Probleme:

    Hab jetzt den kompletten String vom List Befehl (also jede Datei) per StringTokenizer zerlegt, damit ich nur die relevanten informationen rauskrieg!

    Sieht dann so aus:

    Dann hab ich meinen DateFormat so erstellt:
    Code:
     DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, Locale.GERMANY); 
    
     StringTokenizer st = new StringTokenizer(sftpChannel.lstat("./"+data[i]).toString());
     for (int j = 0; j <=9; j++){
     tokenstring[j] = st.nextToken();
     }
     
    
     String time = tokenstring[4]+" "+tokenstring[5]+" "+tokenstring[6]+ " "+tokenstring[7]+" "+tokenstring[8]+" "+tokenstring[9];
     
     try {
     date[i] = df.parse(time).getTime();
     } catch (ParseException e) {
     System.err.println(time);
     }
    
    Also im String time, ist dann nur das komplette Datum drin, mit nem Leerzeichen getrennt und von dem String sollte er dann mit dem DateFormat parsen können und mir die ms seit 1979 blabla zurückgeben!

    Aber krieg ne Exception:
    Weiß einer wie man das Datum aus dem String dann richtig parsen kann, weil der String sieht ja schon ordentlich aus, das müsst doch dann gehen...

    EDIT//

    Habs jetzt auch mal mit SimpleDateFormat probiert, kommt der gleiche scheiß:

    Code:
     //Tue Dec 07 09:26:06 2010
     SimpleDateFormat date2 = new SimpleDateFormat("EEE MMM dd HH:mm:ss yyyy");
     String time = tokenstring[4]+" "+tokenstring[5]+" "+tokenstring[6]+ " "+tokenstring[7]+" "+tokenstring[9];
     
     try {
     date[i] = date2.parse(time).getTime();
     } catch (ParseException e) {
     System.err.println(time);
     }
    
     
  4. 8. Dezember 2010
    AW: SFTP Client

    Du musst die Locale auf US setzten, denn die Monate (z.B. DEC) und Wochentage (z.B. Mon) werden hier englisch abgekürzt. Außerdem zzz für die Zeitzone einfügen.
    Code:
    String input = "Mon Dec 06 14:25:49 CET 2010";
    SimpleDateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
    
    try {
     Date date = df.parse(input);
     System.out.println("Date: " + date.toString());
    } catch (ParseException ex) {
     ex.printStackTrace();
    }
    
     
  5. 13. Dezember 2010
    AW: SFTP Client

    Jop, so einfach war die Lösung ^^

    Vielen Dank

    ~closed~
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.