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????
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
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
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
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
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
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
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

