# FTP Über URLConnection



## DocFaust (13. Jun 2008)

Hallo zusammen,

ich versuche über eine URLConnection eine Datei über FTP zu schreiben:


```
try
		{
			URL url = new URL("ftp://user:pwd@server/file.txt");
			FtpURLConnection con = new FtpURLConnection(url);
			con.setDoOutput(true);
			con.connect();

			OutputStream out = con.getOutputStream();
			out.write("I'm a TestFile\r\n".getBytes());
			out.close();
		}
		catch (MalformedURLException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
```

Dabei kommt folgende Exception :


```
java.net.ProtocolException: cannot write to a URLConnection if doOutput=false - call setDoOutput(true)
	at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:813)
	at sun.net.www.protocol.ftp.FtpURLConnection.getOutputStream(FtpURLConnection.java:464)
	at de.test.FTPDownload.writeURL(FTPDownload.java:40)
	at de.test.FTPDownload.main(FTPDownload.java:26)
```

Properties:
-DproxyHost=xyz
-DproxyPort=8080
sind gesetzt

Kann es sein, dass der Proxy das Schreiben verhindert und deshalb intern der doOutput umgesetzt wird?

Das Lesen einer Datei über diese Mimik funktioniert so.

Die hier öfter beschriebene 

```
URLConnection con = url.openConnection()
OutputStream out = con.getOutputStream
```
funktioniert leider auch nicht

JDK = 1.6.0_06
BS = WIN XP
IDE = eclipse

Danke schonmal
CU
Doc


----------



## Wildcard (13. Jun 2008)

Wie bist du überhaupt auf diese Idee gekommen?
Die Klassen aus den sun Packages gehen dich gar nichts an.
Wenn du was auf einen FTP laden willst, verwende einen FTP Client. Apache zB.


----------



## Gast (14. Jun 2008)

Intern nimmt er diese Klasse eh her. Und damit ich die doOutput aufrufen kann, BEVOR er connected. 
Und wenn ich es - wie geschrieben - "normal" mit URL.openConnection() mache, kommt dieselbe Meldung.

Wenn ich einfach nur auf ein FTP laden wollte, würde ich das mit dem Client wahrscheinlich auch machen. Aber ich möchte automatisiert Daten synchronisieren, die auf einem FTP Server liegen und die mit einem anderen Programm bearbeitet werden

CU
Doc


----------



## DocFaust (14. Jun 2008)

Oops, sorry war nicht angemeldet. Last Post from me. <schäm>


----------



## Wildcard (14. Jun 2008)

> Intern nimmt er diese Klasse eh her.


In *einer* Impelemtierung. Auf einer VM sind unter Umständen gar keine sun.* Klassen enthalten, weil die VM von gnu, IBM, Lego,... ist.
Das ist keine öffentliche API und darf nicht verwendet werden.
Das was du machen möchtest, kannst du damit sowieso nicht machen. Dafür brauchst du einen FTP Client.
Nein, kein End-User Client, sondern eine Java Bibliothek natürlich  :lol: 
Schau dir den besagten Apache FTP Client an.


----------



## DocFaust (14. Jun 2008)

Ok, sehe ich ein. Das mit der FtpURLConnection ist nicht das Gelbe vom Ei.
Allerdings, dass es mit URLConnection gar nicht geht, stimmt nicht ganz, denn ohne Proxy habe ich die Geschichte inzwischen zum Laufen gebracht. 
Vielleicht geht das auch nicht für jede VM, aber diese Implementierung ist ja auch nur dafür gedacht.

Folgende Geschichte funktioniert bei mir zuhause mit einem entfrnten FTP-Server.


```
try
		{
			URL url = new URL("ftp://u:p@h/f");
			URLConnection con = url.openConnection();
			OutputStream out = con.getOutputStream();
			out.write("test".getBytes());
			out.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
```

Natürlich kann ich damit nur Dateien lesen und schreiben und sonst nichts, aber mehr brauch ich auch nicht.

Diese Implementierung wurde btw. auch schon früher in diesem Forum angepriesen.

Danke für Deine Aufklärung
Doc


----------



## Wildcard (14. Jun 2008)

DocFaust hat gesagt.:
			
		

> Natürlich kann ich damit nur Dateien lesen und schreiben und sonst nichts, aber mehr brauch ich auch nicht.


Wenn dir das reicht, lass dich nicht abhalten. Die Standard Java Bibliothek unterstützt nur einen Minimalteil des FTP-Protokolls, deshalb verwendet man für FTP Zugriffe üblicherweise auch zusätzliche Bibliotheken.


----------



## tfa (14. Jun 2008)

http://commons.apache.org/net/


----------

