# FTP-Upload mit sun.net.ftp.FtpClient



## Illuvatar (10. Sep 2004)

So habe ich es bisher probiert:


```
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();
	}
}
```


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

```
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 (10. Sep 2004)

weil du einen stream zurückbekommst denn du beschreiben musst, bleistift

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

```
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
    }
```


----------



## thE_29 (10. Sep 2004)

ich habe sehr lange gesucht nach apis für diese Klasse!

Findet man nie oder selten und im sun forum rät jeder ab das zu benutzen, da es sun eigene Klassen sind und die einfach verschwinden können (wenn eine neue Version rauskommt!)

einzige Location im Inet die ich gefunden habe, wo es eine Doc dazugibt!!


----------



## Illuvatar (10. Sep 2004)

Ja, auch grad gemerkt. :wink: 


```
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 (10. Sep 2004)

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 (10. Sep 2004)

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!


----------

