Einige Fragen zu Files

Status
Nicht offen für weitere Antworten.

A3XX

Bekanntes Mitglied
Hi

Ich hab jetzt das Kapitel Files durchgemacht und hab auch alle Übungen gekonnt. Bei gewissen Dingen weiss ich einfach noch nicht wieso genau man das so macht:

1. Was ist der Unterschied zwischen System.err und System.out? Ich seh keinen, nur dass .err rot schreibt
2. Ich verwendete immer diese I/O Klassen. Was ist genau der Unterschied zwischen InputStreamReader und FileReader?
Und wieso muss ich immer schreiben
a = new BufferedReader(new InputStreamReader(System.in), 1) //Was bedeutet das 1?
b = new BufferedReader(new FileReader("file.txt")) //wieso muss man immer zwei new machen? einen "reinen" BufferedReader ist mir eh nie begegnet...

c = new PrintWriter(new FileWriter("file.txt"), true) // Was bedeutet das true?

3. file.readLine() ist ähnlich wie tokens.nextToken() oder? Spring auch automatisch eine Zeile weiter?

4. Sowohl Lese- als auch Schreibe-Streams muss man immer schliessen?

5. einmal (als er was ausgeben will), schreibt der autor:
System.out.print("Bitte Namen eingeben");
System.out.flush();
reply = keyboard.readLine();

Wieso muss er da .flush() schreiben? was bewirkt das?

6. Am Schluss des Kapitels musste ich noch Konsolenanwendungen schreiben. Da ich Eclipse benütze musste ich immer über Start->Argumente eintragen und dann liefs erst. Kann man diese Konsolenanwendungen auch "eigenständig" machen und so weitergeben?

Danke im Voraus 🙂
 
1. Der eine ist für Fehler (Error), der andere für normale Ausgaben gedacht.
Man könnte natürlich auch den Fehler-Printer in eine Datei umleiten, und könnte so praktisch ein Fehler-Log machen, und trotzdem Zeugs auf die Konsole schreiben...

Für Frage 2 schaust du am besten mal in der API nach, das sollte viele Fragen beantworten.

3. Ein klares "Ja"

4. Ein zweites "Ja".
Beim Schreiben werden so alle Buffer gelehrt (es wird nicht immer alles direkt geschrieben, manchmal werden im RAM Bytes gesammelt. Erhöht insgesammt die Geschwindigkeit).

Beim Lesen werden einfach Ressourcen freigegeben (z.B. eine Internet-Verbindung schliessen...)

5. "flush" leert den Buffer. Aber System.out ist so gebaut, dass das eigentlich nicht nötig sein sollte.

6. Jop, zumindest für Windows kannst du *Batch-Dateien schreiben, die das Programm entsprechend starten. Oder du verlangst die Eingaben einfach später vom Benutzer.

*zum Beispiel
Code:
java Main "argument hallo" 50 60
in einer Datei "start.bat" speichern.

mfg Beni
 
hier schon mal 2 antworten: 🙂

zu frage 1:

es gibt standardmäßig 3 ströme in einem betriebssystem (sehr gut erkennbar in unix)
- standardeingabe (meist tastatur)
- standardausgabe (meistens konsole)
- standardfehlerausgabe (auch meistens konsole)

diese kann man dann auch nach herzenslust umpipen...


2.

ein stream ist ein datenstrom... also wie ne pipeline aus der du was ziehst... die quelle bleibt also quasi offen, während du bei einem reader immer wieder auf die quelle zugreifst
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben