InputStream/URL Problem

Snowowl

Erfahrenes Mitglied
Hallo,

ich möchte eine Datei aus dem Internet herunterladen.
Dies klappt auch (fast),sprich es werden alle Bytes komplett geladen und kopiert, allerdings funktioniert die Datei anschließend nicht.
Exe-Dateien z.B. geben eine Fehlermeldung, oder MP3-Dateien lassen sich nicht abspielen (aber der Titel wird angezeigt!?).

Hier der Code:
Java:
try
{
	this.url = new URL(this.file);
	InputStream is = url.openStream();
	FileWriter writer = new FileWriter(new File("text.exe"));
	int read2;
	while((read2 = is.read()) != -1)
	{
		writer.write(read2);
	}
	writer.close();
}

Ich hoffe, dass mir jemand helfen kann :)

Grüße,

Niklas
 
Bei Streams solltest du grundsätzlich vor dem close() die Methode flush() aufrufen, die bewirkt, dass wirklich alle noch vorhandenen Daten gestreamt werden.
 
Danke für die Antwort, aber leider geht es so auch nicht.

Ich habe es auch anders versucht, mit Scanner:
Java:
InputStream is = url.openStream();
Scanner s = new Scanner(is);
while(s.hasNextLine())
{
	writer.write(s.nextLine());
}

Aber so fehlen am Ende ein paar Byte ^^

Grüße
 
Hab eben mal ein Test mit einer Textdatei gemacht.
Die Zeilen aus dieser werden einfach nebeneinander geschrieben, daran liegt wohl das Problem.
Jedoch weiß ich nicht, wie ich das beheben soll, probiere schon seit 2 Stunden rum.
Vielleicht hat ja Jemand von euch eine Antwort für mich.
 
Hi !

In Bezug auf deinen ersten Beitrag !

So wie ich das sehe liest du Äpfel und schreibst Birnen !

Wenn man die API-Wörtlich nimmt müßte die Datei doppelt so groß sein,
denn :
Die read-Methode vom Input Stream liest 1 Byte vom Stream und
liefert diesen als Integer-Wert.
Dann schreibst du mit dem FileWriter den Integer-Wert als 16 Bit
character in die Datei.

Nimm lieber einen byte[]-Buffer und versuchs damit !

Und beim Zeilenweisen einlesen verlierst du deine Zeilenumbrüche
die hängen nicht mit am ende des gelieferten Strings.
Schreibst du die Strings dann in die Datei ist alles in einer Zeile !

Gruß J.
 
Es ist genau wie TheJadix gesagt hat.

Du liest ganz unabhängig einzelne bytes (als int) über den Inputstream ein.

Jedoch schreibst du die mit dem FileWriter wieder raus, welcher für Strings/Zeichen(ketten) gedacht ist.
Das heißt du musst mit was rausschreiben was auch unabhängig bytes herrausschreibt.

-> FileOutputstream

P.S.: die Streams immer in einem finally schliessen, nicht das nach einer Exception noch die Verbindung offen bleibt.
 
Zurück