Input/Output Verständnis: Wo wird das File auf die Festplatte gepackt?

  • Themenstarter Themenstarter transdenzentral
  • Beginndatum Beginndatum
T

transdenzentral

Gast
Hallo,

ich beschäftige mich gerade im Studium mit IO und habe diesbezüglich jetzt eine Verständisfrage.
Dazu folgender Ausschnitt: (FILENAME sei eine Konstante vom Typ String)

Java:
			BufferedWriter writer = null;
		        File file = new File(FILENAME);

	
			try {
				writer = new BufferedWriter(new FileWriter(file, file.exists()));
				writer.write("Ich bin ein String");
				writer.newLine();			

			} catch (IOException e) {

				e.printStackTrace();
			} finally {
				if (writer != null) {
					try {
						writer.close();
					} catch (IOException e) {
					
						e.printStackTrace();
					}
				}

Zu welchem Zeitpunkt wird mir hier die Datei auf die Festplatte gelegt, falls diese noch nicht vorhanden ist?

Hier
Java:
writer = new BufferedWriter(new FileWriter(file, file.exists()));
beim Aufruf des Konstruktors oder erst, wenn ich versuche etwas hineinzuschreiben oder erst, wenn ich den Writer wieder mittels close() schließe?

Imprinzip geht es mir nur um das Verständnis zu welchen Zeitpunkt die Datei tatsächlich auf meine Festplatte geschrieben wird. Ich hoffe, ich habe mich verständlich ausgedrückt.

Viele Grüße
transdenzentral
 
Sobald du etwas hineinschreibst wird die Datei angelegt. Bei nem BufferedReader muss evtl. erst nen flush() aufgerufen werden damit die Daten geschrieben werden.
 
Okay, d.h. die Datei wird sozusagen zeitlich beim Aufruf der write Methode angelegt, sofern sie noch nicht existiert?

Ich danke Dir!
 
wenn du schon komische Fragen stellst die eigentlich nichts mit Java zu tun haben, dann doch besser nicht im Basics-Bereich..

ein bisschen Wissen dazu:
sobald der Writer erstellt ist, gibts auf der Festplatte einen Eintrag, kann man ja separat prüfen,
dann ist irgendeine Art Verbindung offen, geschrieben wird genau dann wenn geschrieben wird,
ein BufferedReader verzögert das seiner Natur nach gerne, aber hat auch nur begrenzte Fassung, kann also schon vor close() schreiben,
entweder wenn viel ankommt oder auch bei flush()-Aufruf,
letztmalig dann bei close()

ohne Buffer kann man das Schreiben deutlich verlangsamen wenn alle viele chars/ bytes einzeln geschrieben werden,
das deutet auf ständige Festplattenkommunikation hin,
für sowas wurde dann quasi Buffer erfunden
 
EikeB hat gesagt.:
Sobald du etwas hineinschreibst wird die Datei angelegt. Bei nem BufferedReader muss evtl. erst nen flush() aufgerufen werden damit die Daten geschrieben werden.
Ich habe das gerade auf Windows XP ausprobiert. Hier wird die Datei bereits beim Aufruf von "new FileWriter(...)" angelegt und nicht erst, wenn man mit dem Hineinschreiben beginnt. Weiß nicht, ob das bei Linux auch so ist. Werd ich heute Abend zu Hause ausprobieren.

transdenzentral hat gesagt.:
Okay, d.h. die Datei wird sozusagen zeitlich beim Aufruf der write Methode angelegt, sofern sie noch nicht existiert?
Wie oben schon geschrieben, zumindest bei Windows XP wird die Datei bereits beim Aufruf des FileWriter-Konstruktors angelegt. Schreib man danach nichts hinein und beendet das Programm, hat man eine 0 Byte große Datei auf der Platte.

@transdenzentral: Solche Fragestellungen sind interessant. Man kann die Antwort aber auch durch selbst ausprobieren raus finden. Das geht meist schneller, als die Frage im Forum zu stellen. Gerade bei der genauen Analyse des Ablaufs hilft das schrittweise Durchgehen mit dem Debugger.

//Edit: Sorry für die Wiederholung. Einen Teil hat SlaterB schon beantwortet. Habe es nur beim ersten Durchlesen seines Posts nicht so ganz verstanden.
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben