# Dateien erstellen / Text in Dateien schreiben



## Guest (8. Jan 2008)

Hallo zusammen,

Ich gucke mir gerade ein Beispiel an, wie ich Text in Dateien schreiben kann.


```
outputFile = new File(fileName);

outputFile.createNewFile();

PrintWriter output;
BufferedWriter buffer;
FileWriter fileWriter;

try {
    fileWriter = new FileWriter(outputFile);
    buffer = new BufferedWriter(fileWriter);
    output = new PrintWriter(buffer);
    try {
        output.print("Test");
        output.print("\n");
    } finally {
        output.close();
        buffer.close();
        fileWriter.close();
    }
} catch (IOException e) {
    System.out.println("Fehler");
}
```

Jetzt meine Frage: Warum muss ich das machen, dass ich erst die Datei erzeuge (ok, das ist logisch), dann den FileWriter, dann den BufferedWriter und dann den PrintWriter? Geht das nicht irgendwie direkt? Wozu sind die einzelnen Sachen gut?


----------



## gast (8. Jan 2008)

ich kann dir zwar nicht sagen, warum das in dem Beispiel so gemacht wurde - aber ich hab das anders gelöst:


```
// Schreibe alle Elemente als Textzeilen in die Datei:
            String testausgabe;

	    try 
	    {
	      BufferedWriter out = new BufferedWriter(
	                           new OutputStreamWriter(
	                           new FileOutputStream( dateiname + ".txt" ) ) );
	      
	      for( int i=0; i<vec.size(); i++ ) 
	      {
	    	testausgabe= vec.get(i).toString();
	        out.write( testausgabe, 0, testausgabe.length() );
	        out.newLine();
	      }
	      out.close();
	    } 
	    catch( IOException ex ) 
	    {
	      System.out.println( ex );
	    }
```
[/quote]


----------



## SlaterB (8. Jan 2008)

zwei gäste, fast drei Meinungen,
Java arbeitet bei den Streams nunmal baukastenweise, 
FileWriter/ FileOutputStream kümmern sich fast nur um die Datei (ok, FileWriter kann schon bisschen mehr),
BufferedWriter dagegen interessiert sich gar nicht dafür, was hinten rauskommt, hat nur mit dem Handling zu tun
(nicht jedes Zeichen einzeln schreiben, lieber 1000 in einen Buffer und alles zusammen 1x schreiben)
PrintWriter macht Formatierung/ Kodierung von Texten wenn ich mich recht erinnere usw., 

nun sind zwar oft gleiche Kombinationen erforderlich, aber Extra-Klassen dafür im Voraus bauen?
kann ja auch jeder selber machen, 
ob das nun eine gute Taktik ist oder nicht kann man durchaus fragen


----------



## Guest (8. Jan 2008)

Und wofür ist dann der PrintWriter in meinem (dem ersten) Beispiel da?

Verstehe ich das richtig, dass ich den BufferedWriter gar nicht bräuchte, sondern, wenn ich den weglassen würde, dass der die Datei dann zwar schreibt, aber wirklich Zeichen für Zeichen?


----------



## SlaterB (8. Jan 2008)

zu Printwriter habe ich noch etwas im vorherigen Post editiert,
schaue dir einfach die API von PrintWriter im Vergleich zu der von BufferedWriter an, 
da sieht man dann schon Unterschiede
(bei BufferedWriter vs FileWirter ist der Unterschied eher intern/ versteckt)
wenn du eh nur Strings schreibst, reicht sicherlich erstmal auch ein BufferedWriter

--------

nicht Zeichen für Zeichen, sondern Befehl für Befehl,
erst würde "Test" = 4 Zeichen geschrieben werden,
danach in einem zweiten Festplattzugriff "\n" = 1 Zeichen

BufferedWriter wartet dagegen ab und schreibt später (beim close()) alle 5 Zeichen


----------



## Guest (8. Jan 2008)

Ok, das wird jetzt schon alles einiges deutlicher   

Noch eine letzte Frage, was ist denn schlimm/unschön daran, wenn das Befehlsweise in die Datei geschrieben wird? Oder anders, was ist der Vorteil, das in einem Rutsch zu schreiben?


----------



## SlaterB (8. Jan 2008)

jeder Festplattenzugriff dauert 100x so lange wie sich das ganze intern zu merken,

bei wenigen Zugriffen macht das nix aus, eh im Millisekundenbereich/ das Anlegen der Datei dauert eh viel mehr/ bis der User einmal die Augen blinzelt ist das Programm 10x fertig,
aber wenn große Dateien in vielen kleinen Schritten geschrieben werden, merkt man den Unterschied


----------



## Leroy42 (8. Jan 2008)

Der Vorteil ist, daß weniger (langsame) Festplattenzugriffe notwendig sind.


----------



## Guest (8. Jan 2008)

Top, dank euch!!


----------

