Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

FTP-Filetransfer mit JAVA





Frage

Hallo zusammen, bin gerade dabei mit JAVA ein Programm zu schreiben, das aus einer Word-Datei eine HTML-Seite in einem bestimmten für unsere HP wichtigen Format zu erzeugen. Nur würde ich gern noch am Ende den FTP-File-Transfer der fertigen Seite auf den server automatisieren. Hat da jemand ein Beispielprogramm für das Übertragen einer Datei auf FTP-Server?

Antwort 1 von semi


import java.io.*;
import sun.net.ftp.*;
import sun.net.*;

public class FtpTest {

    public static void main(String argv[]) {

      FtpClient ftp = null;
      try {
        System.out.print("Connecting to home.wherever.com...");
        ftp = new FtpClient("home.wherever.com");
        System.out.println(" OK");
        System.out.print("Sending user and password...");
        ftp.login("name", "password");
        System.out.println(" OK");
        System.out.print("Setting binary transfer mode...");
        ftp.binary();
        System.out.println(" OK");

        BufferedInputStream in = new BufferedInputStream(
          new FileInputStream("ftptest.class")
        );
        System.out.println("Sending file");
        TelnetOutputStream out = ftp.put("ftptest.class");
        byte buffer[] = new byte[2048];
        int bytesRead = 0;
        int bytesSend = 0;
        int c=1;
        while((bytesRead = in.read(buffer, 0, 2048))!=-1) {
          out.write(buffer, 0, bytesRead);
          bytesSend += bytesRead;
          System.out.print(".");
        }
        out.flush();
        out.close();
        in.close();
        buffer = null;
        System.out.println("\n"+bytesSend + " Bytes OK.");

      }
      catch(FtpLoginException e) {
        System.out.print(" Failed: ");
        System.err.println(e.getMessage());
      }
      catch(FtpProtocolException e) {
        ftp = null;
        System.out.print(" Failed: ");
        System.err.println(e.getMessage());
      }
      catch(IOException e) {
        System.out.print(" Failed: ");
        System.err.println(e.getMessage());
      }
      finally{
        if(ftp != null) {
          try {
            System.out.print("Closing connection...");
            ftp.closeServer();
            System.out.println(" OK");
          }
          catch(IOException e) {
            System.err.println(e.getMessage());
          }
        }
        ftp = null;
      }

    }
}

Compilieren mit

javac -classpath .;%JAVA_HOME%/jre/lib/rt.jar; FtpTest.java

Baue eine etwas bessere Fehlerprüfung ein.

Gruß,
Michael

Antwort 2 von ThomasA

Danke für die Hilfe, doch leider meint mein / das prog bei der Zeile TelnetOutputStream out = ftp.put("ftptest.class");
mit der vielsagenden Exception "PORT" ab. Und nun????

Antwort 3 von semi

Firewall blockt es ab?

Antwort 4 von ThomasA

keine firewall vorhanden. privater pc, (fast) kein sicherheit auf Win98 und am empfänger einfach nur 1&1

Antwort 5 von semi

Mußt Du bei Deinem Provider irgendeinen Proxy-Server angeben?
Wenn Ja, dann versuche folgenden Aufruf:

java -Dftp.proxyHost=proxyhost
-Dftp.proxyPort=portNumber -cp .;%JAVA_HOME%/jre/lib/rt.jar; FtpTest.java

Ansonsten fällt mir spontan nur "Gääähhn" ein :-)

Gruß,
Michael

Antwort 6 von ThomasA

Mojn Michael!
Tja, da ich keinen proxi nutze/nutzen muß komm ich jezt auch nicht weiter. es ist einfach ein t-online zugang ins netz und der server ist der 1&1-Server von puretec


Antwort 7 von semi

Die Klasse FtpClient von SUN versucht zuerst eine passive Verbindung, wie ein Browser. Wenn dies nicht klappt, dann wird vesucht eine aktive Vebindung herzustellen. Im zweiten Fall wird das PORT-Commando geschickt.

Verwendest Du JDK 1.3.x oder 1.4?
In 1.3.x wird sofort mit "aktiv" versucht. Dies könnte das Problem sein.

Kannst Du mit einem anderen FTP-Programm eine aktive FTP-Verbindung aufbauen?

Gruß,
Michael

Antwort 8 von ThomasA

Hallo Michael,
ich habe JDK 1.3 b24 wenn ich mit JBuilder arbeite.
Mit WSFTP (der stellt glaube ich ne aktive Verbindung her???) als fertigem FTP-Programm habe ich kein Problem. Da ist eine fileup und filedownload kein Problem.
Ob der aber überhaupt mit JDK arbeitet????

Irgendwie weiß ich auch zu wenig von FTP um das beurteilen zu können.
Gruß
Thomas

Antwort 9 von semi

Hallo,

Installiere JDK 1.4.x und versuche es damit. Beachte, dass Du dann beim Aufruf, die richtige rt.jar verwendest (die von JRE 1.4)
Ich habe mit JDK 1.4 probeweise ein Upload auf den Arcor- und Tiscali-Server gemacht und es hat einwandfrei funktioniert.
Wenn Du die beiden Versionen (1.3 u. 1.4) der Sourcecodes der Klasse FtpClient vergleichst, dann wirst Du den Unterschied sehen.

Gruß,
Michael

Antwort 10 von ThomasA

Danke für dei Hilfe!
Habe jbuilder 8 inastalliert und damit jdk 1.4 und schon läuft es!
Verstehe zwar immer noch nicht warum aber anyhow.... man muß nicht alles kapieren.

Gruß
Thomas

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: