FTP getcontentlength

irgendjemand

Top Contributor
ich würde mal stark drauf tippen das irgendwelche libs (nicht) vorhanden sind bzw fehlerhaft geladen werden ...

auch wäre mal interessant WIE du versuchst an die länge zu kommen ... denn sowas unterstützt java von haus aus eigentlich nicht ...
 

Gebbo

Mitglied
ich versuche mit der folgenden methode an die länge zukommen:
Java:
 public static void asdf() {
    	 {
    	  try
    	        {

    	          URL url = new URL("ftp://ftp.fu-berlin.de/pub/misc/movies/database/movie-links.list.gz");
    	          URLConnection con = url.openConnection();
    	          con.connect();
    	          
    	          System.out.println(con.getContentLength());
    		  
    		  
    	        } 
    	        catch(Exception e)
    	        {
    	         e.printStackTrace();
    	        }   
    	 }
    }

Wie kann ich das mit den libs überprüfen?
 

ESCS

Mitglied
Bei mir läufts ohne Probleme. An irgendwelchen Libs kanns nicht liegen, da URLConnection eine Standardimplementierung ist. Würde eher bei deiner Systemkonfiguration nach möglichen Fehlerquellen suchen.
 

Gebbo

Mitglied
Bei mir tritt das Problem am Laptop und am PC auf, haben beide die exakt gleiche Eclipse version drauf. Bin noch recht neu in Java und Netzwerkprogrammierung, wonach müsste ich suchen ^^
 

Gebbo

Mitglied
Über Konsole gestartet tritt das Problem immer noch auf, ich denke ich werd einfach mal eclipse neuinstallieren.
Danke für eure Hilfe.

Edit: grade eclipse neu runtergeladen, bekomme immer noch -1 zuück
 
Zuletzt bearbeitet:

ESCS

Mitglied
Wieso denn Eclipse neu installieren, wenn es über die Konsole nicht funktioniert? ???:L

Ansonsten überprüf mal, ob deine Java Version aktuell ist.
 

Gebbo

Mitglied
"Die Java-Version wurde überprüft
Herzlichen Glückwunsch!
Sie haben die empfohlene Java-Version installiert (1.7.0_03)."

Daran liegts wohl auch nicht, mir selber sind schon lange die ideen ausgegangen -.-
 

irgendjemand

Top Contributor
1) du hast eine überflüssige zeile drin

Java:
 URLConnection con = url.openConnection();
                  con.connect();

JAPI hat gesagt.:
If the connect method is called when the connection has already been opened (indicated by the connected field having the value true), the call is ignored.

kann also raus ...
ist aber leider nicht die fehlerquelle

2) getContentLength() / getContentLengthLong()

JAPI hat gesagt.:
Returns the value of the content-length header field.
[...]
-1 if the content length is not known, or if the content length is greater than Integer.MAX_VALUE.

getContentLength() erwartet also den HTTP HEADER "Content-Length" ...
und da dieser im FTP nun mal NICHT vorhanden ist ... ist klar das diese methode fehlschlägt ...

und genau das meinte ich eigentlich mit LIBs ... für FTP braucht man eine LIB wie z.b. Apache Commons ... bzw bastelt sich das ganze selber ... wenn man es richtig nutzen kann

URLConnection kann man nur bedingt für FTP nutzen ... wenn man z.b. die größe eines files haben will ... muss man das FTP command SIZE absetzen ... was URLConnection eben NICHT macht ... und desshalb auch keine länge liefern kann


natürlich funktioniert erwartungsgemäß dein code NICHT
 

Gebbo

Mitglied
In dem Bereich kenn ich mich leider noch gar nicht aus. Die libary apache.commons.net zu importieren hab ich noch hinbekommen, nur schaff ich es hier immer noch nicht die größe der datei raus zu finden. Könnte mir hier jemand ne Anleitung geben wie, da google mir auch nicht hilft.
 

irgendjemand

Top Contributor
DAS ist eine schöne frage ... geb ich zu ... würde hier allerdings vermuten das entweder über einen HTTP-proxy gegangen wird der ja dann den HTTP Header Content-Length hat ... oder das der server sonst was macht ... *ich habs mir mit wireshark angesehen ... der server liefert schon die länge ohne explizites SIZE ... jedoch dürfte auf grund des custom-format URLConnection nicht in der lage sein das zu parsen*

WIE du mit apache-commons-ftp die SIZE eines remote-files rausbekommst entnimmst du bitte der ausführlichen API-DOC ...

das wäre mal so die idee die ich hätte ... einfach mal mit wireshark gucken was genau da über den socket kommt ...

kann auch sein das es implementierungsabhängig ist *z.b. wird unter unix gerne IcedTea verwendet ... kann sein das das mit FTP besser klar kommt als OracleSE* ...
oder auch vielleicht mal im openJDK nachgucken ... irgendwo wird der grund für dieses *meiner ansicht nach* fehlverhalten von URLConnection.getContentLength() in zusammenhang mit FTP zu finden sein ...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D URL getContentLength() liefert zu wenig bytes Netzwerkprogrammierung 7

Ähnliche Java Themen


Oben