Streams und Reader/Writer

Status
Nicht offen für weitere Antworten.

lava

Mitglied
Ich bin Neu-Einsteigerin von C/C++ nach Java. Ich finde es noch sehr verwirrend, was es in Java alles an Input/Output-Streams und -Readern/Writern gibt. In einer ersten Testaufgabe soll ich den Inhalt einer URL in ein File schreiben. Nun bin ich total verwirrt, ob ich das besser charakterweise mit Reader/Writer oder byteweise mit Input/Outputstreams mache, ob ich gepufferte Streams brauche oder nicht etc. Scheinbar krieg ich den Inhalt der URL zudem nur mit openStream(??), was dann schonwieder was anderes als InputStream oder Reader ist ? Bin dankbar für jede Durchblick-Hilfe!
 

JPKI

Top Contributor
Reader/Writer sind vor allem beim Lesen und Schreiben von Strings zu gebrauchen, Streams für alles andere, z.B. Objekte, primitive Datentypen und der Gleichen. Auch wenn du im Netzwerk kommunizierst, werden Streams verwendet (zumindest bei den häufig verwendeten Stream-Sockets).
 
G

Gast

Gast
Okay, weil es um beliebige URLs gehen soll und nicht zwangsläufig Text, also den allg. InputStream nehmen? Jetzt soll ich noch irgendwie das charset der HTML-Dateien beachten - wie geht das denn????
 

lava

Mitglied
Hm, ich hatte etwas geschrieben, wo ich den Durchblick hatte. Dann hat mein Arbeitskollege es überarbeitet und ich hab dabei den Durchblick verloren und jetzt ist er in Urlaub und ich hab meine originale Datei nicht mehr. Hier sein Code:

Code:
import java.io.*;
import java.net.*;


public class VonUrlZuDatei implements OverwriteConfirmer
{
	/*
	 * URL File FileOutputStream
	 */

	private static void downloadFile(URL url, File filenew, OverwriteConfirmer owc) throws IOException, FileExistsException
	{

		if (filenew.exists())
		{
			if (owc==null)
				throw new FileExistsException("File already exists: "+filenew.getPath());
			else
				if (!owc.mayOverwrite(filenew))
					return;
		}

		FileOutputStream fw=null; 

		fw = new FileOutputStream(filenew);
		try
		{
			InputStream urlinput = null;
			urlinput = url.openStream();
	
			byte[] buf=new byte[1024];
			int n;
			while ((n=urlinput.read(buf))!=-1)
				fw.write(buf, 0, n);
		}finally
		{
			fw.close();
		}
		
	}


	private BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

	private void runUI()
	{
		try {
			// url holen
			System.out.println("Welche Url soll geöffnet werden?");
			URL newurl = new URL(input.readLine());
			

			// file holen
			System.out.println("In welche Datei wollen Sie schreiben?");
			File filenew= new File(input.readLine());

			// file runterladen
			try {
				downloadFile(newurl,filenew,this);
				System.out.println("Download erfolgreich.");
			} catch (IOException e) {
				System.out.println("Fehler beim Download: "+e.getMessage());
			} catch (FileExistsException e)
			{
				System.out.println("Datei existiert schon. "+e.getMessage());
			}
		} 			
		catch (MalformedURLException e)
		{
			System.out.println ("Diese URL ist ungültig"); return;
		}
		catch (IOException e)
		{
			System.out.println("Datei einlesen klappt nicht!");
		}
	}


	public static void main(String[] args)
	{
		new VonUrlZuDatei().runUI();
	}





	public boolean mayOverwrite(File file)
	{
		System.out.println("Datei "+file.getPath()+" existiert schon. Überschreiben?");
		String answer;
		try {
			answer = input.readLine();
		} catch (IOException e) {
			return false;
		} 
		return answer.equalsIgnoreCase("ja");
	}

}


Wieso kann ich ein "this" an die Schnittstelle OverwriteConfirmer weitergeben? Wieso ist urlinput ein Inputstream und gleichzeitig irgendwie mit dem read-Befehl doch wieder ein Output? Wie muß der OverwriteConfirmer definiert sein? Er hat bisher nur

Code:
import java.io.File;


public interface OverwriteConfirmer {
	public boolean mayOverwrite(File file);
}


dafür festgelegt und gesagt, ich soll das noch ergänzen - aber ich weiß nicht wie, was für einen Typ hat so ein Interface überhaupt? Wieso bekommt es ein this übergeben???

*Wildcard - Codetags eingefügt*
 

Wildcard

Top Contributor
lava hat gesagt.:
Wieso kann ich ein "this" an die Schnittstelle OverwriteConfirmer weitergeben?
Code:
private static void downloadFile(URL url, File filenew, OverwriteConfirmer owc)
Code:
downloadFile(newurl,filenew,this);
Hier kann 'this' übergeben werden, da VonUrlZuDatei OverwriteConfirmer implementiert und damit auch vom Typ OverwriteConfirmer ist.

lava hat gesagt.:
Wieso ist urlinput ein Inputstream und gleichzeitig irgendwie mit dem read-Befehl doch wieder ein Output?
was hat denn 'read' mit Output zu tun? ???:L
Input: lesen
Output: schreiben

lava hat gesagt.:
dafür festgelegt und gesagt, ich soll das noch ergänzen - aber ich weiß nicht wie, was für einen Typ hat so ein Interface überhaupt? Wieso bekommt es ein this übergeben???
Ein Interface ist vom Typ des Interfaces :wink:
In diesem Fall ist der Typ also OverwriteConfirmer.
 

lava

Mitglied
Wildcard hat gesagt.:
[Hier kann 'this' übergeben werden, da VonUrlZuDatei OverwriteConfirmer implementiert und damit auch vom Typ OverwriteConfirmer ist.[\quote]
Danke, hilfreiche Antwort!

Wildcard hat gesagt.:
was hat denn 'read' mit Output zu tun? ???[\quote] Sorry, war verwirrt. Bin es immer noch. Meine Realisierung mit Writer/Reader geht jetzt. Versuche es nun mit Streams:

Code:
FileOutputStream fw = new FileOutputStream(filenew); 
InputStream liesmichausurl = newurl.openStream();
[\code]

Wie krieg ich nun den Inputstream so umgewandelt, daß ich ihn als Parameter an das FileOutputStream übergeben kann?
 

solnze

Aktives Mitglied
lava hat gesagt.:
Wie krieg ich nun den Inputstream so umgewandelt, daß ich ihn als Parameter an das FileOutputStream übergeben kann?

hm hat doch dein *kollege* alles schon fertig.


Code:
byte[] buf=new byte[1024];
         int n;
         while ((n=urlinput.read(buf))!=-1)
            fw.write(buf, 0, n);


bissel sehr kompakte und wenig uebersichtliche schreibweise zudem unter einem methoden namen der nicht ganz passt aber fuer mich sieht es so aus als wuerde er an dieser stelle,
den urlinput lesen,
dem bytearray zuweisen,
mit der -1 pruefen wann das streamende erreicht ist
und solange das nicht der fall ist wirds halt an den fileoutputstream uebergeben.
 

lava

Mitglied
Ja, sieht so aus. Einfach direkt den einen Stream dem anderen zuweisen geht nicht irgendwie auch?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Sogomn Input/Output Reader, Writer und Streams Java Basics - Anfänger-Themen 6
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Parallel Streams Java Basics - Anfänger-Themen 18
W Streams in Java und was bedeutet meine Konsolen-Ausgabe? Java Basics - Anfänger-Themen 4
M Streams Java Basics - Anfänger-Themen 34
M Streams filter Java Basics - Anfänger-Themen 15
M generate Methode für Streams Java Basics - Anfänger-Themen 6
berserkerdq2 Java streams, wann nutze ich ::, also 2x Doppelpuntk bei Streams? Java Basics - Anfänger-Themen 5
B Produkt eines double - streams Java Basics - Anfänger-Themen 3
berserkerdq2 IO Streams logfile erstellen und Sachen schreiben wie? Java Basics - Anfänger-Themen 2
D Verwirrung bei Streams aus primitiven Arrays Java Basics - Anfänger-Themen 2
B Collections Streams - Hilfestellung bei komplexer Struktur Java Basics - Anfänger-Themen 9
S Streams - Abfrage absteigend sortieren Java Basics - Anfänger-Themen 11
S Streams - kleinstes Element finden Java Basics - Anfänger-Themen 4
J String Array zu Map<Character, List<Character>> mit Streams Java Basics - Anfänger-Themen 1
Kirby.exe Fehlende Int Werte aus Array mit streams finden Java Basics - Anfänger-Themen 19
W Eclipse Autoformatierung für Streams ändern ? Java Basics - Anfänger-Themen 1
S Lambda Ausdrücke Streams Java Basics - Anfänger-Themen 6
I Streams Java Basics - Anfänger-Themen 12
N Frage zu Streams Java Basics - Anfänger-Themen 3
U Input/Output Unterschiede Streams Java Basics - Anfänger-Themen 2
X Streams und Ausgabe - lässt sich das einfacher schreiben oder schöner schreiben? Java Basics - Anfänger-Themen 5
C system.out.printf mit streams benutzen Java Basics - Anfänger-Themen 7
C Methoden Sortieren mit Streams: Auf- und absteigend Java Basics - Anfänger-Themen 2
O Streams und die flush Methode Java Basics - Anfänger-Themen 3
P InputStream eines Musik-Streams abspielen Java Basics - Anfänger-Themen 2
M Input/Output Streams Java Basics - Anfänger-Themen 5
T Klassen wie funktionieren Streams, warum bekomme ich int zurück? Java Basics - Anfänger-Themen 2
J Java 8 Streams - Frage zu "reduce" Java Basics - Anfänger-Themen 6
T Fehler mit Streams! Java Basics - Anfänger-Themen 2
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
J Per I/O Streams in LinkedList oder ArrayList schreiben/lesen Java Basics - Anfänger-Themen 6
I Java Streams Java Basics - Anfänger-Themen 6
R Streams for runaways Java Basics - Anfänger-Themen 5
RySa Input/Output Datei kann nicht gelöscht werden, obwohl Streams geschlossen sind. Java Basics - Anfänger-Themen 2
D Input/Output streams und readLine() Java Basics - Anfänger-Themen 3
firefexx Input/Output close() bei mehreren Streams Java Basics - Anfänger-Themen 5
M Frage zu Streams Java Basics - Anfänger-Themen 9
C try finally - Streams schließen Java Basics - Anfänger-Themen 7
M Streams und Sockets Java Basics - Anfänger-Themen 3
M file löschen, streams evtl noch offen Java Basics - Anfänger-Themen 7
G Character-orientierte File-Streams mit der Klasse FileReader Java Basics - Anfänger-Themen 5
S Piped Streams / Threads Java Basics - Anfänger-Themen 6
H Frage zu Byte-Streams Java Basics - Anfänger-Themen 2
P Streams mit Sockets Java Basics - Anfänger-Themen 7
V Performance Lesen und Schreiben aus/in Streams Java Basics - Anfänger-Themen 4
C RandomAccessFile vs. Streams Java Basics - Anfänger-Themen 5
M Probleme mit den Streams Java Basics - Anfänger-Themen 2
G streams schließen Java Basics - Anfänger-Themen 2
P Fragen zu STreams Java Basics - Anfänger-Themen 5
M Streams Java Basics - Anfänger-Themen 4
H Streams etc. erster Versuch Zeilen aus einer Datei zu lesen Java Basics - Anfänger-Themen 6
? Streams Java Basics - Anfänger-Themen 2
R RandomAccessFile mit anderen Streams verbinden Java Basics - Anfänger-Themen 5
G Rekursionsaufgabe mit Streams Java Basics - Anfänger-Themen 5
J Problem mit Streams Java Basics - Anfänger-Themen 15
K Frage zu SdtOut streams bzw. Socket Programmierung Java Basics - Anfänger-Themen 3
M Streams, read and write Java Basics - Anfänger-Themen 2
M Streams Java Basics - Anfänger-Themen 2
B Streams wollen scheinbar nicht schließen Java Basics - Anfänger-Themen 6
S Umwandlung eines Character-Streams in ein Image Java Basics - Anfänger-Themen 17
E Probleme mit Streams Java Basics - Anfänger-Themen 3
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
R CSV Reader läuft nicht richtig an Java Basics - Anfänger-Themen 8
S Input/Output Reader/Writer finden file nicht Java Basics - Anfänger-Themen 3
L Klassen NFC Reader und JavaFx Problem -> threads? Java Basics - Anfänger-Themen 2
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
Textsurfer Erste Schritte CSV Import Reader Writer Java Basics - Anfänger-Themen 0
A Reader für Benutzereingabe in Eclipse importieren Java Basics - Anfänger-Themen 3
W Reader Java Basics - Anfänger-Themen 9
W Java XML-Reader: Content not allowed in Prolog Java Basics - Anfänger-Themen 7
D Jpg in BufferedImage Reader oder Array ablegen? Java Basics - Anfänger-Themen 5
H "Conways GameofLife - Vom Reader ins Array" Java Basics - Anfänger-Themen 5
C FileWriter bzw. Reader fehlerhaft Java Basics - Anfänger-Themen 6
P txt reader Problem Java Basics - Anfänger-Themen 17
L buffered reader produziert zu viele und seltsame zeichen Java Basics - Anfänger-Themen 2
A Interface Reader interface verwenden Java Basics - Anfänger-Themen 4
S Input/Output Reader: "null" wenn While-Ende Java Basics - Anfänger-Themen 5
F Reader - brauche Hilfe Java Basics - Anfänger-Themen 19
M Reader-Problem Java Basics - Anfänger-Themen 5
Haubitze_Broese RSS-Reader? Java Basics - Anfänger-Themen 2
Haubitze_Broese Pattern für Links in RSS-Reader Java Basics - Anfänger-Themen 6
A Problem Reader Java Basics - Anfänger-Themen 39
Developer_X Sav-Data reader, fehler Java Basics - Anfänger-Themen 2
V Buffered Reader, erst ab bestimmter Zeile auslesen? Java Basics - Anfänger-Themen 8
K Probleme mit Buffered Reader Java Basics - Anfänger-Themen 8
P Buffered Reader an Anfang setzen Java Basics - Anfänger-Themen 4
D RSS Reader mit Redaktionssystem Java Basics - Anfänger-Themen 7
F Was gibt der Buffered Reader zurück bei Dateiende? Java Basics - Anfänger-Themen 2
T Writer/Reader Problem Java Basics - Anfänger-Themen 4
H Buffered Reader Java Basics - Anfänger-Themen 7
G Buffered REader, String, ist mein code korrekt? Java Basics - Anfänger-Themen 4
M Writer für unterschiedliche Obj/inbt/double erstellen? Java Basics - Anfänger-Themen 1
D Komplizierte Frage zum Writer Java Basics - Anfänger-Themen 4
N Input/Output Java IO Writer - Subklassen Java Basics - Anfänger-Themen 19
J Java Writer funktioniert nicht mehr Java Basics - Anfänger-Themen 8
D Input/Output Writer schreibt nicht in Subprozess Java Basics - Anfänger-Themen 3
N Word oder Open Office Writer Java Basics - Anfänger-Themen 10
Burny91 FileReader und Writer gleichzeitg nutzen Java Basics - Anfänger-Themen 2
M Unterschied append / write aus der Klasse Writer Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben