# Datei erzeugen schreiben und lesen ?



## Reeb (18. Nov 2004)

Hallo zusammen,

ich möchte für ein Programm eine Datei erzeugen in welche ich Daten schreiben kann und wenn das Programm das nächte mal aufgerufen wird , ich diese Daten auch wieder auslesen kann. Die Daten sind Strings für ein Wörterbuch.
ich hab schon einiges probiert, die programme zum erzeugen der Datei sowie lesen und schreiben laufen auch ohne Fehler, nur wird weder eine Datei erzeugt die ich hinterher nachdem ich das Programm geschlossen habe wiederfinde, noch kann ich etwas auslesen, noch finde ich wärend des laufenden Programmes eine Datei mit dem Namen den ich erzeugt habe. kann mir jemand helfen ?

würde vollkommen ausreichen wenn es eine Textdatei wäre die ich Zeilenweise auslesen kann.

MFG Reeb


----------



## Peter@Pan (18. Nov 2004)

Was für einen Writer benutzt du den zum Schreiben der Datei?
Hast du auch dran gedacht den Ausgabestrom nach dem Schreiben zu schließen?
Wenn es möglich ist vielleicht den Code bzw. Teile davon posten.

Also zum einfachen schrieben von Text-Datein müsste das hier funktionieren:


```
public static void createDefaultFile()
	{
		BufferedWriter out;
		
		try {
			out = new BufferedWriter (new FileWriter("test.txt"));
			out.write("Hallo");
			out.newLine();
			out.write("Neue Zeile1");
			out.newLine();
			out.write("Neue Zeile2");
			out.newLine();
			out.write("Neue Zeile3");
			out.newLine();
			out.write("Neue Zeile4");
			out.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
```


----------



## bernd (18. Nov 2004)

```
PrintWriter ausgabeDatei;
         ausgabeDatei = new PrintWriter(new FileWriter("dat1.txt", true));  // erstellt die Datei
         ausgabeDatei.print(jtfvname.getText();
         ausgabeDatei.close();
```

Das packst du noch in einen try catch Block!

 :wink:

Uff, zu spät!


----------



## Reeb (18. Nov 2004)

Erst mal danke an euch beide

ich habs mit Objektwritern mit Streamwritern mit Bufferedwritern mit Stringwritern und Fileoutputstreams probiert


hier mal der code mit dem ich es probiert habe

```
String s = "Testabcx";
          try{
          BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
                               new FileOutputStream( "test.txt" ) ) );
          out.write( s );
          out.newLine();
          out.close();
          }
          catch(IOException e){
              System.out.println("fehler");
          }
[\code]

Damit hab ich es versucht, das Problem ist das ich die Datei hinterher auf meinem Recher nicht finden kann, ich hab auch versucht eine test.txt i gleichen package zu erstellen aber wenn ich das Programm dann abfahre dann ist da trotzdem nix drinn, hab auch den code von oben ausprobiert, läuft auch genau wie das von mir phne Fehler durch, nur finde ich wiederum die Datei hinterher nicht auf meinem Rechner, wo legt der die denn an? oder ist die Datei nach dem close wieder weg, so als wenn die Instanz nach Programmende auch gelöscht wird??
```


----------



## bernd (18. Nov 2004)

Wenn die Datei erzeugt worden ist, und keinen Pfad angegeben hast,
müsste sie im selben Verzeichnis wie deine Java Datei liegen!


----------



## Reeb (18. Nov 2004)

das hab ich mir ja auch gedacht, allerdins ist in dem Package keine Datei mit dem Namen, und wenn ich meine gesammte Festplatte durchsuche werde ich auch nicht fündig, wie kann ich denn einen expliziten Pfad angeben, dann probier ich das mal, einfach 

```
File a = new File("c:\test.txt");
[\code] 
oder funktioniert das nicht
```


----------



## bernd (18. Nov 2004)

Unter Windows müsste:
File a = new File("c:\\test.txt");

funktionieren! Wichtig ist: \\  !
( aber nur unter Windows! )


----------



## Reeb (18. Nov 2004)

Habs mal hiermit probiert

```
File a = new File("C:\\testaa.txt");
            String s = "Testabcx"; 
            try{ 
            FileWriter out = new FileWriter("testaa.txt"); 
            out.write( s ); 
            out.close(); 
            } 
            catch(IOException e){ 
            System.out.println("fehler"); 
            } 
[\code]

dannach erhalte ich eine Nachricht, das Datei schreiben beendet wurde, dennoch gibt es diese Datei nicht ??
```


----------



## sliwalker (18. Nov 2004)

hoi,

je nach dem welche daten du speichern möchtest, würde ich mir überlegen
komplette Objekte wegzuschreiben, die du dann auch so wieder auslesen kannst.
Die Objekte würde ich vorher in einen Vector packen um bei 100 Objekten nicht
100 Schreibvörgänge auszulösen. So kann man auch unterschiedlich viele Objekte
bei jedem Vorgang schreiben.
So was in der Art:

```
public void schreiben(Object o)
	{
		try
		{
			p.writeObject(o);		
		}
		catch(IOException e)
		{
			System.out.println(e);
		}
	}



// Aufruf

            Person p = new Person();
            p.SetVorname(din.readLine());
            vector.addElement(p);

            ds.schreiben(vector);
            ds.schliessen();
```

greetz
SLi


----------



## bernd (18. Nov 2004)

Ja ist klar!
Versuch mal das hier!

```
import java.io.*;
public class Datei1 {

  public static void main(final String[] args) {
       File a = new File("testaa.txt");
    String s = "Testabcx";
    try{
    FileWriter out = new FileWriter("c:\\testaa.txt");
    out.write( s );
    out.close();
    }
    catch(IOException e){
    System.out.println("fehler");
    }
  }
}
```
 :lol:


----------



## Reeb (18. Nov 2004)

also das ganze soll nen wörterbuch mit verketteten Listen werden, mein Hauptproblem ist immoment gar nicht wie(das heißt in welcher Form) ich die Daten in die Datei schreibe, sondern das ich erst einmal eine Datei erzeuge die bleibt und in die ich schreiben kann, wenn ich hinterher erst mal in meinen arbeitsplatz schaue und unter c: ne test.txt habe in der Hallo du drinnsteht, dann bin ich ja fürs erste *G* zufrieden.
aber du hast recht, ich hatte auch schon überlegt die ganzen Listenelemente in einen vektor zu schreiben, vor allem da man sie hinterher auch einfacher wieder auslesen kann.


----------



## bernd (18. Nov 2004)

Dann probier das von mir mal aus, das funktioniert!


----------



## Reeb (18. Nov 2004)

Dat funzioniert. blendent danke, kann mir trotzdem nicht ganz erklären warum das ander nicht funktioniert


----------



## Reeb (18. Nov 2004)

hab noch nen bissel probiert, der Pfad muss definitiv im Filewriter angegeben werden, der File muss vorher nicht instanziiert werden.


----------



## bernd (18. Nov 2004)

Der muss ja wissen wohin er das schreiben soll!

```
FileWriter out = new FileWriter("c:\\testaa.txt");
```
 8)


----------



## Reeb (18. Nov 2004)

ich hattegedacht das würde er bei der erzeugeung des Files brauchen (File a = new File("c:\\estaa.txt")) baer das war es ja nicht , super jetzt bin ich was schlauer... danke nochmal, das Forum hier ist echt klasse, werd noch häufiger vorbeischauen.


----------



## bernd (18. Nov 2004)

Schön das ich auch mal einem Helfen konnte!


----------



## Reeb (18. Nov 2004)

So jetzt hab ich mal probiert die Datei auch wieder auszulesen, nach einigen versuchen ist das hier übrig geblieben, hat einer ne Idee wo da der Fehler steckt, das was ich ausgegeben bekomme ist null, sonst nix.


```
try{
 File aaa = new File("c:\\t.txt");
 FileReader test = new FileReader(aaa);

 System.out.println(test.read());
 
 test.close();
 } 
 catch(IOException e){ 
 System.out.println("fehler2"); 
 } 
[\code]
```


----------



## bernd (19. Nov 2004)

Dann mach mal so! 

```
import java.io.*;
public class Datei1 {
      static String zeile;
  public static void main(final String[] args) {
      try {
        BufferedReader eingabeDatei = new BufferedReader(new FileReader("c:\\t.txt"));  // ließt die Datei aus
         while ((zeile = eingabeDatei.readLine()) != null) {
           System.out.println(zeile + "\n");  // zeigt den Dateiinhalt an
         }
         eingabeDatei.close();
       }
       catch (Exception e) {
         System.err.println("Fehler bei Datei "+e.toString());
         System.exit(1);
       }
    }
}
```

Gruß Bernd.


----------

