Dateidownload per FTP wird immer langsamer und bleibt dann stehen

Milo

Bekanntes Mitglied
Hallo,

ich möchte von einem Server Dateien runterladen. Ich nutze hierfür Apache Commons Net. Grundsätzlich funktioniert es auch aber wenn ich mehrere Dateien ziehen möchte, dann wird der Download langsamer und bleibt irgendwann stehen. Das langsamer könnte zwar auch Einbildung sein aber hängen bleibt er in jedem Fall. Mein Problem ist, dass ich nicht erkennen kann, warum er hängenbleibt. Ich bekomme keine Fehlermeldung oder einen anderen Hinweis. Die Methode downloadFile wird in einer Schleife permanent aufgerufen und soll Dateien lokal abspeichern. Es handelt sich hierbei um ca. 100-150 Dateien. Das Programm bleibt auch nicht immer an der selben Stelle stehen.

Java:
public File downloadFile(String local, String remote) {
	FileOutputStream fos = null;
	File file = null
	try {
		file = new File(local);
		FileOutputStream fos = new FileOutputStream(file);
		ftp.retrieveFile(remote, fos);
		fos.flush();
	} catch (IOException e) {
		e.printStackTrace();
	}	
	finally {
		if (fos != null) {
			try {
				fos.close();
			} catch (Exception e) {
				e.printStackTrace();
			}	
		}
	}
	return file;
}

Hatte jemand schon ein vergleichbares Problem? Welche Ursachen könnte es haben?

Bin für Anregungen dankbar!
Micha
 

FArt

Top Contributor
Theorie: die Datei ist mächtig groß, füllt den Speicher aus und die VM ist nur noch mit GC beschäftigt... das kann man alles messen... bau mal Logging ein und (Speicherverbrauch, Zeiten, geladene Datenme nge usw.) und analysiere das, damit das Gefühl auch belegt werden kann.
 

Milo

Bekanntes Mitglied
Hallo FArt,

vielen Dank für Deinen Hinweis. Die Dateien sind alle klein (unter 1MB, zum Testen im Moment unter 100kb). Ich habe es nun auch via:

Java:
URL url = new URL("ftp://example.org/myfile");
InputStream in = url.openConnection().getInputStream();

probiert und auch hier bleibt das Programm nach x Downloads einfach stehen, wobei x nicht immer die selbe Dateianzahl ist. Ich erreicht so ca. 150/200 Downloads.

Der Aufruf erfolgt dabei analog zum gestern beschriebenen in einer Schleife:
Java:
for ( Map.Entry<String, FTPFile> e : fileList.entrySet() ) {
	String newFileName = e.getKey();
	FTPFile ftpFile    = e.getValue();
				
	if (!localFileList.containsKey(newFileName) || 
			(localFileList.get(newFileName).length() < ftpFile.getSize()) ) {
					
		System.out.println("Download " + ftpFile.getName());
		File file = ftp.downloadFileViaURL(this.destPath + newFileName, remoteServer.getPath() + ftpFile.getName());
		if (file != null && file.exists()) {
			if (!file.setLastModified(ftpFile.getTimestamp().getTimeInMillis())) {
				System.err.println("Fehler beim setzen von LAST-MODIFIFIED fuer File " + file.getName());
			}
		}
	}

Die Methode downloadFileViaURL sieht dann wie folgt aus:

Java:
public File downloadFileViaURL(String local, String remote) {
		File file = null;
		FileOutputStream out = null;
		InputStream in = null;
		try {
			URL url = new URL("ftp://" + this.uri + remote);
			
			//System.out.println(url);
			
			in = url.openConnection().getInputStream();
			file = new File(local);
	
			out = new FileOutputStream( file );
			
			int len;
			byte[] buffer = new byte[1024];

            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }

			out.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally {
			if (in != null) {
				try {
					in.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			if (out != null) {
				try {
					out.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		return file;
	}

Mir würde ja auch eine Fehlermeldung/Exception schon reichen, um wenigstens die Chance zu haben, reagieren zu können aber es bleibt einfach stehen?!

Gruß Micha
 
Zuletzt bearbeitet:

Milo

Bekanntes Mitglied
... Nachtrag: Ich habe gerade mal das setLastModified entfernt und nun scheint es zu laufen. Kann es wirklich daran liegen?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Proxy für Dateidownload? Netzwerkprogrammierung 3
B HTTP Dateidownload mit % anzeige? Netzwerkprogrammierung 6
M Problem mit Dateidownload Netzwerkprogrammierung 12
Z dateidownload vom servlet aus Netzwerkprogrammierung 4
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
OnDemand JMS Messages wird gecached Netzwerkprogrammierung 2
P RMI stub wird nicht gefunden Netzwerkprogrammierung 8
I Socket ObjectOutputStream-Socket: Objekt wird falsch übertragen Netzwerkprogrammierung 2
M com.google.gson wird nicht erkannt Netzwerkprogrammierung 2
F Website parsen, die mit javascript zusammengebaut wird Netzwerkprogrammierung 1
P Socket Server übertragung wird immer langsamer Netzwerkprogrammierung 4
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
L Server anpingen (Pingzeit) ?? Pingzeit wird nicht verändert Netzwerkprogrammierung 6
M JSP wird im gesamten Projekt nicht neugeladen Netzwerkprogrammierung 3
K Socket InputStream wird nicht erzeugt Netzwerkprogrammierung 4
R Socket SSL-Connect in Servlet - keystore wird nicht gefunden Netzwerkprogrammierung 2
S anderer Rechner wird nicht gefunden Netzwerkprogrammierung 20
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
X Änderung des Objekts wird nicht serialisiert Netzwerkprogrammierung 9
M Socket TCP keep alive Exception wird nicht ausgelöst Netzwerkprogrammierung 11
F getSource Methode wird als Bot erkannt Netzwerkprogrammierung 8
Dit_ RMI setSoTimeout wird ignoriert? Netzwerkprogrammierung 3
lumo String[] wird zu null bei Serialisierung Netzwerkprogrammierung 8
J method = PUT, aber ausgeführt wird doGet...? Netzwerkprogrammierung 4
K Was wird genau per Telnet verschickt ? Netzwerkprogrammierung 5
J BufferedReader.ready() wird nicht true Netzwerkprogrammierung 10
A Socket BufferedReader.readLine() blockiert bis ein im Socket OutputStream was gesendet wird ... Netzwerkprogrammierung 9
C RMI Klasse wird unter falschem Pfad gesucht Netzwerkprogrammierung 4
B Server-Programm wird durch "read" beendet Netzwerkprogrammierung 8
A Socket Client Server Connection wird aufgebaut aber keine daten geschickt. Netzwerkprogrammierung 5
N Socket Verbindung wird immer verweigert Netzwerkprogrammierung 5
K HTTP-Anfrage an einen Server wird nicht beantwortet Netzwerkprogrammierung 3
M URL Handler wird nicht gefunden Netzwerkprogrammierung 6
L SSL Verbindung aber Server wird erst im Programm festgelegt Netzwerkprogrammierung 4
L Https Verbindung wird aus jar heraus nicht aufgebaut Netzwerkprogrammierung 12
C Download-Fortschritt wird falsch angezeigt. Netzwerkprogrammierung 2
A Quellcode von Homepage wird nicht komplett eingelesen Netzwerkprogrammierung 5
V RMI: code wird einfach übergangen ? Netzwerkprogrammierung 3
A FileChannel+SocketChannel:Datei wird nur teilweise übertrage Netzwerkprogrammierung 4
F Stream wird als Char übertragen. Char -> in String umwand Netzwerkprogrammierung 5
L RMI-Funktion wird lokal ausgeführt Netzwerkprogrammierung 12
A RMI: Wo wird die Methode ausgeführt? Netzwerkprogrammierung 9
P JNDI LDAP-SSL Verbindung, Zertifikat wird nicht angezeigt ? Netzwerkprogrammierung 2
A JavaMail Problem - Nachricht wird nicht versendet ? Netzwerkprogrammierung 9
T finlalize Methode vom Server wird nicht aufgerufen Netzwerkprogrammierung 4
B Socket wird nicht richtig geschlossen Netzwerkprogrammierung 2
K mapSystemException wird geworfen Netzwerkprogrammierung 2
L Attachment wird nicht angezeigt in der Email Netzwerkprogrammierung 3
P RMI - meine Stub-Class wird nicht gefunden Netzwerkprogrammierung 9
G Socket wird nach Portscann geschlossen Netzwerkprogrammierung 2
R Socket wird nicht ausgeführt Netzwerkprogrammierung 6
S BufferedStream funktioniert nicht immer Netzwerkprogrammierung 7
Dann07 Audio streamen bricht immer ab nach kurzer Zeit Netzwerkprogrammierung 6
C Quelltext Webseite schlägt noch immer fehl Netzwerkprogrammierung 30
A Bestimmter URL/Certificate per Java immer vertrauen (Trustmanager/HostnameVerifier) Netzwerkprogrammierung 1
S UDP Broadcast - Pakete kommen nicht immer an Netzwerkprogrammierung 15
nrg HTTP URLConnection immer neu öffnen? Netzwerkprogrammierung 6
G Server schickt immer null-Wert Netzwerkprogrammierung 5
1 Socket Immer offener Port? Netzwerkprogrammierung 11
T Tomcat zeigt immer nur eine Seite Netzwerkprogrammierung 3
T Socket immer Verbunden halten Netzwerkprogrammierung 11
A InputStream liest immer komplettes PHP-Script Netzwerkprogrammierung 6
C Dateiübertragung - Datei immer ein 4096faches von n Netzwerkprogrammierung 2
V Socket#getInputStream() immer der gleiche oder nicht? Netzwerkprogrammierung 4
M Socketverbindung funzt nich immer Netzwerkprogrammierung 3
N Socketkommunikation: Immer nur abwechselnd? Netzwerkprogrammierung 2
S ich bekomme immer java.rmi.UnmarshalException Netzwerkprogrammierung 10
J in.ready() liefert IMMER false zurück Netzwerkprogrammierung 11
G immer wieder gleiche Sockets Netzwerkprogrammierung 2
E BufferedReader.ready() immer false Netzwerkprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben