Dateidownload Funktioniert nicht

TKausL

Top Contributor
Hallo.

Habe mir eine kleine Klasse zum Dateidownload geschrieben:

Java:
	private void dowloadFile(String from, File to) {
		HttpURLConnection localHttpURLConnection = null;
		File outputFile = to;
		try {
			if (outputFile.exists())
				outputFile.delete();
			if (!outputFile.getParentFile().exists())
				outputFile.getParentFile().mkdirs();
			outputFile.createNewFile();

			URL localURL = new URL(from);
			localHttpURLConnection = (HttpURLConnection) localURL
					.openConnection();
			localHttpURLConnection.setRequestMethod("POST");
			localHttpURLConnection.setRequestProperty("Content-Type",
					"application/x-www-form-urlencoded");

			localHttpURLConnection.setRequestProperty("Content-Length", "0");
			localHttpURLConnection.setRequestProperty("Content-Language",
					"en-US");

			localHttpURLConnection.setUseCaches(false);
			localHttpURLConnection.setDoInput(true);
			localHttpURLConnection.setDoOutput(true);

			localHttpURLConnection.connect();

			DataOutputStream localDataOutputStream = new DataOutputStream(
					localHttpURLConnection.getOutputStream());
			localDataOutputStream.flush();
			localDataOutputStream.close();

			InputStream localInputStream = localHttpURLConnection
					.getInputStream();
			BufferedReader localBufferedReader = new BufferedReader(
					new InputStreamReader(localInputStream));
			int tmp;
			FileWriter outputFileWriter = new FileWriter(outputFile);
			while ((tmp = localBufferedReader.read()) != -1) {
				outputFileWriter.write(tmp);
				patchedBytes++;
			}
			localBufferedReader.close();
			outputFileWriter.close();
			localHttpURLConnection.disconnect();
			return;
		} catch (Exception localException) {
			localException.printStackTrace();
			return;
		} finally {
			if (localHttpURLConnection != null)
				localHttpURLConnection.disconnect();
		}
	}

Leider funtkioniert das ganze nicht so ganz.
Habe Local einen XAMPP-Laufen und eine .jar-Datei in den htdocs-Ordner geschoben. Die .jar läuft einwandfrei.

Nach dem Download ist die Datei zwar noch exaxt so groß wie die Original-Datei, allerdings bekomme ich folgenden Fehler beim Starten:

Caused by: java.util.zip.ZipException: invalid block type
at java.util.zip.InflaterInputStream.read(Unknown Source)
at sun.misc.Resource.getBytes(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
... 7 more

Hat jemand eine Idee?

Edit: Bin grade auf http://www.java-forum.org/allgemeine-java-themen/82758-dateidownload-java.html gestoßen, und mit den 1024Byte-Chunks funktioniert es. Frage mich dennoch, warum meine Variante nicht funktioniert hat...
 
Zuletzt bearbeitet:
S

SlaterB

Gast
Reader sind ganz böse hier, sind zeichenorientiert, wandeln alles in chars um, welche bei Speicherung wiederum andere bytes ergeben und ähnlich schlimme Scherze

Binärdaten nur mit Streams bearbeiten, BufferedInputStream wie im anderen Fall,
dann ist read() jedes Byte einzeln auch nicht so schlimm, der BufferedInputStream soll schließlich buffern und tut das auch,

mit einem BufferedInputStream noch ein eigenes Array als Chunk zu verwenden im Link ist dagegen bisschen doppelt gemoppelt,
aber zwei Netze im Zirkus sind ja auch nicht schlimm,
schneller als 1000 einzelne read()-Aufrufe sowieso,

eher als auf das eigene Array kann man auf den Buffer verzichten, nicht ganz so nötig,
besonders wenn man noch das Array auf 8192 Bytes erhöht (wie der Buffer es auch macht)
 

TKausL

Top Contributor
Habe es jetzt so:

Java:
			byte[] chunk = new byte[1024];
			int chunkSize;
			OutputStream os = new FileOutputStream(
					outputFile);
			while ((chunkSize = localInputStream.read(chunk)) != -1) {
				os.write(chunk, 0, chunkSize);
				patchedBytes += chunkSize;
				activeByte += chunkSize;
				Thread.sleep(1);
			}
			os.flush();
			os.close();
			localInputStream.close();
Ich hoffe das ist so in Ordnung :p
Das Thread.sleep(1); musste ich reinpacken, damit ich auch die Progressbars sehe, die den Status anzeigen sollen.
Schon Blöd, wenn man extra ne 80 MB-Datei nutzt zum testen, diese dann aber mit 50MB/s pro Sekunde von localhost geladen wird xD
Das sleep bremst den Download auf etwa 1MB/s (bei 1024 Buffer) und auf etwa 7 (dürften fast 8 sein) MB/s

PS: Gibt es zu meiner (nicht perfektionierten) Methode evtl. eine Alternative?:

Java:
	public String bytesToBigger(long bytes) {
		if (bytes < 1024)
			return bytes + " B";
		bytes /= 1024;
		if (bytes < 1024)
			return bytes + " KB";
		bytes /= 1024;
		return bytes + " MB";
	}
 
Zuletzt bearbeitet:
S

SlaterB

Gast
grundsätzlich nochmal zu Buffer:
aus einem einfachen InputStream einzelne Bytes zu lesen ist normalerweise nicht gut,
hier geht es vielleicht, aus dem Netzwerk kommen eh nur große Pakete an, die sind wohl schnell gelesen,

von der Festplatte hört man eher, dass das die read()s zu zu vielen Festplattenzugriffen führen, obwohl es auch da vielleicht javaunabhängig Caches gibt,

besser ist jedenfalls, in einem Schritt tausende Bytes einzulesen

------------

wie oft verwendest du bytesToBigger() denn? selbst bei ganzen Bildschirm voll nur begrenzt viele Aufrufe
wenn das Richtige rauskommt, dann doch super
 

TKausL

Top Contributor
wie oft verwendest du bytesToBigger() denn? selbst bei ganzen Bildschirm voll nur begrenzt viele Aufrufe
wenn das Richtige rauskommt, dann doch super

Die Progressbars und Downloadraten werden alle 0,05 aktualisiert und wärenddessen werden 4 Werte umgerechnet.

Da es eigentlich zum Standart gehört, Bytewerte zu lesbaren Werten umzurechnen dachte ich dass sowas in Java schon existent sein könnte :)
Ansonsten werde ich selbst nochmal rumschrauben müssen, hätte nämlich bei der Downloadrate schon gerne auch Nachkommastellen (1,9 MB/s würde derzeit zum int gecastet nur 1MB/s anzeigen...)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Java Dateidownload klappt bei einigen Datein nicht Allgemeine Java-Themen 7
zilti Dateidownload mit Java Allgemeine Java-Themen 14
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
W While Schleife funktioniert nicht ganz Allgemeine Java-Themen 4
H do-while Schleife funktioniert nicht wie ich es möchte Allgemeine Java-Themen 7
ERlK JDA Code funktioniert nicht? Allgemeine Java-Themen 4
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
stormyark TikTakToe funktioniert nicht Allgemeine Java-Themen 10
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
N Regulärer Ausdruck funktioniert nicht Allgemeine Java-Themen 6
Lukas2904 Wie funktioniert ein KeyLogger? Allgemeine Java-Themen 3
Tobero Meine Funktion für das beinhalten eines Punktes in einem Kreis funktioniert nicht Allgemeine Java-Themen 5
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
Killunox MaxHeap Zuweisung unter Linux funktioniert nicht Allgemeine Java-Themen 1
I Wieso funktioniert das nich? Allgemeine Java-Themen 5
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
O Aus JAR-Datei erstellte EXE-Datei funktioniert nicht Allgemeine Java-Themen 10
A Mp3 Player funktioniert nicht Allgemeine Java-Themen 0
X JNA funktioniert nicht mehr Allgemeine Java-Themen 4
bueseb84 FolderWatcher mit WatchService funktioniert nur bedingt Allgemeine Java-Themen 5
Drachenbauer Division mit Int funktioniert nicht Allgemeine Java-Themen 3
O docx-Datei erzeugung mit DocXStamper funktioniert nicht Allgemeine Java-Themen 2
F Schleife funktioniert nicht richtig Allgemeine Java-Themen 13
T Split() Methode funktioniert nicht?! Allgemeine Java-Themen 11
L Tesseract-OCR 4.0 unter Linux funktioniert nicht Allgemeine Java-Themen 3
J Wie konkret funktioniert das Modulsystem unter Java 11? Allgemeine Java-Themen 4
J Neuronales Netz funktioniert mal und mal nicht. Allgemeine Java-Themen 3
T Umlaute in Eclipse einlesen funktioniert nicht Allgemeine Java-Themen 16
A Methodenaufruf funktioniert nicht richtig Allgemeine Java-Themen 5
C WindowBuilder Design funktioniert nicht Allgemeine Java-Themen 0
J FTPSClient funktioniert nicht Allgemeine Java-Themen 4
H IDEA IntelliJ Java Mail funktioniert nach Export nicht mehr! Allgemeine Java-Themen 1
M Operatoren Warum funktioniert diese überprüfung nicht? Allgemeine Java-Themen 7
R jar-Datei funktioniert nicht Allgemeine Java-Themen 2
E Open Declaration Funktioniert nicht Allgemeine Java-Themen 0
R Verschlüsselung funktioniert nicht Allgemeine Java-Themen 5
RalleYTN requires transitive funktioniert nicht? Allgemeine Java-Themen 7
R Bruteforce hashes mit multithreading. Funktioniert das so? Allgemeine Java-Themen 0
P Best Practice Wieso funktioniert der Modulo - Operator nicht? Allgemeine Java-Themen 2
HarleyDavidson Eigener PropertyChangeListener funktioniert einfach nicht Allgemeine Java-Themen 3
J Exclude funktioniert nicht Allgemeine Java-Themen 2
K .jar funktioniert nicht vollständig Allgemeine Java-Themen 1
P Java https proxy (-Dhttps.proxyHost) Start-Parameter funktioniert nicht? Allgemeine Java-Themen 2
L Auswertung eines Testes funktioniert nicht Allgemeine Java-Themen 37
O Fahrenheit/Celsius Converter funktioniert nicht Allgemeine Java-Themen 2
M Serialisierung funktioniert nicht Allgemeine Java-Themen 9
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
J Arrays auf gleichheit untersuchen funktioniert nicht Allgemeine Java-Themen 11
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H Timer funktioniert nicht? Allgemeine Java-Themen 3
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
O Mein JButton Array funktioniert nicht Allgemeine Java-Themen 3
R Erste Schritte Object reference funktioniert nicht. Wie mach ichs richtig? Allgemeine Java-Themen 3
J If Abfrage funktioniert nicht Allgemeine Java-Themen 4
R Objekt funktioniert nicht auf iOS Allgemeine Java-Themen 15
U PersistenceManager.createEntityManager funktioniert nicht Allgemeine Java-Themen 3
D Java Datei nach Eclipse Export funktioniert nicht Allgemeine Java-Themen 0
M Eigene forEach()-Methode funktioniert nicht. Allgemeine Java-Themen 2
H File.listFiles() funktioniert nicht... Allgemeine Java-Themen 10
JG12111989 Auswertung von Fragebogen funktioniert nicht! Allgemeine Java-Themen 7
M Primzahlberechnung funktioniert nicht. Allgemeine Java-Themen 4
A JFreeChart funktioniert nicht :( Allgemeine Java-Themen 6
C file.delete() funktioniert bei zweiten aufruf nicht mehr Allgemeine Java-Themen 3
F Datei einlesen funktioniert nicht Allgemeine Java-Themen 3
A Debugger im Java-Editor funktioniert nicht Allgemeine Java-Themen 5
B DB-Zugriff einer Webanwendung funktioniert nicht mit Java 7 Allgemeine Java-Themen 2
B Web-Anwendung funktioniert mit Java 1.8, aber nicht mit Java 1.7 (auf Client) Allgemeine Java-Themen 5
J Swing Cursor.WAIT funktioniert nicht nach JFileChooser Allgemeine Java-Themen 1
P Wie funktioniert das Feedback eines Klicks auf eine Java GUI Allgemeine Java-Themen 10
F JTextField funktioniert nicht Allgemeine Java-Themen 6
Athena Programm funktioniert nur beim Debugging korrekt, sonst nicht. Allgemeine Java-Themen 1
S CSV Eintrag der nächsten Zeile auslesen funktioniert nicht Allgemeine Java-Themen 8
S Command funktioniert in Kommandzeile aber nicht mit ProcessBuilder bzw. Runtime.exec auf MAC Allgemeine Java-Themen 3
G Verschlüsselungsalgorythmus funktioniert nicht Allgemeine Java-Themen 2
buggy84 Ausführen einer Batch mit Parameterübergabe funktioniert nicht richtig Allgemeine Java-Themen 18
G Befehl funktioniert in Eclipse allerdings nicht in einer Jar-Datei Allgemeine Java-Themen 3
N Werte aus Arrays auslesen funktioniert nicht Allgemeine Java-Themen 5
W getResources funktioniert nur in Eclipse, nicht in JAR Allgemeine Java-Themen 2
S Methode funktioniert nicht als ActionListener Allgemeine Java-Themen 4
M exec() funktioniert nicht Allgemeine Java-Themen 1
M RC4-Chiffre (funktioniert eingeschränkt) Allgemeine Java-Themen 6
X Datentypen Dropzone.options funktioniert nicht Allgemeine Java-Themen 1
D Java funktioniert nur mit deaktivierter Grafikkarte Allgemeine Java-Themen 3
L Erste Schritte Eclipse und Lokal funktioniert - in HTML nicht! Allgemeine Java-Themen 2
K MD5 funktioniert nicht korrekt !? Allgemeine Java-Themen 9
M JAR Datei erstellen funktioniert nicht Allgemeine Java-Themen 5
Q JLabel Textausgabe funktioniert nicht Allgemeine Java-Themen 4
E SimpleDateFormat-Konvertierung funktioniert nicht Allgemeine Java-Themen 3
C Wie funktioniert Projektplanung? Allgemeine Java-Themen 18
K String.replace funktioniert nicht Allgemeine Java-Themen 3
G treeMap.putall funktioniert nicht?! Allgemeine Java-Themen 2
DaniSahne96 Threads Code funktioniert nicht wie er sollte Allgemeine Java-Themen 9
S Warum funktioniert die runable -.jar nicht? Allgemeine Java-Themen 7
P Eclipse Unter Windows erstelle .jar unter Linux (Ubuntu) funktioniert nicht Allgemeine Java-Themen 5
H Mit Ant erstelltes jar funktioniert nicht wie direkt in Eclipse Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben