FTP-Upload mit sun.net.ftp.FtpClient

Status
Nicht offen für weitere Antworten.

Illuvatar

Top Contributor
So habe ich es bisher probiert:

Code:
package main;

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


public class FtpPutter 
{
	private String server;
	private String username;
	private String pass;
	private FtpClient ftpc;
	public FtpPutter (String server, String username, String pass) throws IOException
	{
		this.server = server;
		this.username = username;
		this.pass = pass;
		ftpc = new FtpClient ();
		ftpc.openServer (server);
		ftpc.login(username, pass);
		ftpc.binary();
		System.out.println (ftpc.welcomeMsg);
	}
	public void put (File img) throws IOException
	{
		ftpc.put(img.getAbsolutePath());
	}
	public void close () throws IOException
	{
		ftpc.closeServer();
	}
}

Code:
FtpPutter img = new FtpPutter ("es-wave.de", "ätsch", "sagichnich");
		File f = new File ("C:\\Dokumente und Einstellungen\\PfM\\Eigene Dateien\\Eigene Bilder\\ICQ.jpg"); //zum Test
		img.put(f);
		img.close();
System.exit (0);

Das Problem ist: (wer hätts gedacht) es funktioniert nicht. Auf dem Server wird eine leere Datei namens C:\Dokumente und Einstellungen\PfM\Eigene Dateien\Eigene Bilder\ICQ.jpg angelegt, das Programm bleibt allerdings bei dem closeServer hängen. Wenn ich statt
Code:
ftpc.put(img.getAbsolutePath());
//-->
ftpc.put(img.getAbsolutePath()).close();
screibe, beendet sich das Programm, die Datei ist trotzdem leer.

Kennt sich jemand mit der Klasse aus?
 

thE_29

Top Contributor
weil du einen stream zurückbekommst denn du beschreiben musst, bleistift
Code:
    File fIn = new File("C:\\kass.ini"); //Handler auf die Datei
    try{
      myFtp.binary(); //setzt auf binär um (sicherheitshalber)
      myFtp.cd("/home/npos/data"); //wechselt nochmals sicherheitshalber das verzeichnis
      outStream = myFtp.put("kass.ini");

      FileInputStream in = new FileInputStream(fIn);   //holt sich den Writer
      while ( (x = in.read()) != -1)
      {
        outStream.write(x); //schreibt das Zeichen
      }
      outStream.close(); //closed den Writer
      in.close(); //closed den Reader

lesen
Code:
  try
    {
      TelnetInputStream tisStream = myFtp.get("kass.ini");
      File fKassa = new File("C:\\kass.ini"); //erzeugt die Datei
      FileOutputStream out = new FileOutputStream(fKassa);   //holt sich den Writer
      while ( (x = tisStream.read()) != -1)
      {
        out.write(x); //schreibt das Zeichen
      }
      out.close(); //closed den Writer
      tisStream.close(); //closed den Reader
    }
 

Illuvatar

Top Contributor
Ja, auch grad gemerkt. :wink:

Code:
public void put (File img) throws IOException
	{
		OutputStream os = ftpc.put(img.getName());
		InputStream is = new FileInputStream (img);
		byte[] buf = new byte[1024];
		int len;
		while ((len = is.read(buf)) >= 0){
			os.write(buf, 0, len);
		}
		os.close();
	}

Aber was sollte ich sonst verwenden? Und hast du da auch Beispielcode? (Wobei ich nicht denke, dass das Programm je mit was anderem als 1.5 laufen muss)
 

DP

Top Contributor
sonst kann ich die api von enterprisedt.com empfehlen. benutze ich selbst und ist top. support gibt es von den entwicklern selbst kostenlos im forum unter o.g. url.

cu
 

thE_29

Top Contributor
mit urlconnection oder so, bin zu faul daheim nachzusehen!
aber es geht so auch, so musst du aber die ftp befehle hin schicken usw, geht aber auch!
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben