# File lesen



## Shin_Sello (2. Sep 2010)

Hey Leute ^^

Ich hab nen neuen Thread aufgemacht(weil eRaaaa mir dazu geraten hat) indem ich eure Hilfe beanspruche.

Also, mein Problem ist wie folgt:

Ich habe eine Datenbank mit ArrayList erstellt. Die Datenbank arbeitet mit Vererbung und ich habe eine Super Klasse Fahrzeug und die davon erbenden Klasse Auot, Motorrad und LKW. Außerdem habe ich ein Konsolenmenü gemacht, da ich das KM ziemlihc praktisch finde.

Methoden die ich erledigt habe sind:
addFahrzeug(fügt ein Auot/Motorrad(LKW Objekt meiner DB hinzu)
TestFahrzeuge(erstellt 5 Testfahrzeuge)
gibausDB(gibt die komplette DB aus)
gibausAnzahl(gibt die Anzahl der Objekte in der DB aus)
loesche Index(löscht ein Objekt mit dem entsprechenden eingegebenen Index)
IndexAusgabe(Gibt aus welches Objekt auf dem eingegebenen Index gespeichert ist)
Filespeichern(speichert die DB in eine Textfile)

Was ich noch machen will, ist:
FileLesen
Verschlüsselung

Grade bin ich dabei das FileLesen zu machen und heirbei habe ich ein Problem...

Ich kenn mich nicht besonders mit dem Tokenizer aus und es fällt mir daher schwer herauszufinden, wie ich den eingelesenen Text in ein FahrzeugObject umwandle...

Hier ist einmal der Code meines FileLesen(was eben momentan fertig ist):


```
public static void FileLesen() throws FileNotFoundException, IOException {
		try {
			BufferedReader in = new BufferedReader(new FileReader(
					".\\output\\DatenbankFile.txt"));
			boolean istDa = true;
			while (istDa) {
				String s = in.readLine();
				if (s != null) {
					s += in.readLine();
					StringTokenizer st = new StringTokenizer(s);
				     while (st.hasMoreTokens()) {
				         System.out.println(st.nextToken());
				     }

				} else {
					istDa = false;
					in.readLine();
				}
			}
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
```

Ich hoffe das mit jemand helfen kann ^^

MfG Shin


----------



## fastjack (2. Sep 2010)

Serialisiere doch einfach. (Google: java serialize)


----------



## ARadauer (2. Sep 2010)

was steht in deiner Textdatei?


----------



## Shin_Sello (2. Sep 2010)

In meiner Textdatei hab ich ein Beispiel Fahrzeug hinzugefügt und gespeichert, dain steht:
Art des Fahrzeugs: Auto, Hersteller: BMW, Leistung: 100, Maximale Km/h: 10, Anzahl der Reifen: 1, Türen: 2

MfG Shin


----------



## ARadauer (2. Sep 2010)

schau dir mal mein Beispiel an...
einfaches Objekt

```
public class Kunde {
   
  private String vorname;
  private String name;
  private String adresse;
  
   public String getVorname() {
      return vorname;
   }
   public void setVorname(String vorname) {
      this.vorname = vorname;
   }
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   public String getAdresse() {
      return adresse;
   }
   public void setAdresse(String adresse) {
      this.adresse = adresse;
   }
}
```
und hier eine kleine Klase zum Lesen und SChreiben mit Testmethode


```
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;


public class KundenDao {
   
   public ArrayList<Kunde> readKunden(File file) throws IOException{
      BufferedReader reader = new BufferedReader(new FileReader(file));
      
      ArrayList<Kunde> result = new ArrayList<Kunde>();
      String line = null;
      while((line = reader.readLine()) != null){      
         String[] parts = line.split(",");
         Kunde kunde = new Kunde();
         kunde.setName(parts[0]);
         kunde.setVorname(parts[1]);
         kunde.setAdresse(parts[2]);
         
         result.add(kunde);
      }
      reader.close();
      return result;      
   }
   
   public void writeKunden(ArrayList<Kunde> kunden, File file) throws IOException{
      if(!file.exists())
         file.createNewFile();
      
      BufferedWriter writer = new BufferedWriter(new FileWriter(file));
         
      for(Kunde kunde: kunden){
         StringBuilder buf = new StringBuilder();
         buf.append(kunde.getName()).append(",")
         .append(kunde.getVorname()).append(",")
         .append(kunde.getAdresse()).append(",").append(System.getProperty("line.separator"));       
         writer.write(buf.toString());
         writer.flush();
      }
      writer.close();
      
   }
   
   //zum testen
   public static void main(String[] args) throws IOException {
      
      ArrayList<Kunde> kunden = new ArrayList<Kunde>();
      
      Kunde a = new Kunde();
      a.setVorname("Hans");
      a.setName("Maier");
      a.setAdresse("asdf");
      kunden.add(a);
      
      Kunde b = new Kunde();
      b.setVorname("Andreas");
      b.setName("Huber");
      b.setAdresse("asdf123");
      kunden.add(b);
      
      KundenDao dao = new KundenDao();
      dao.writeKunden(kunden, new File("c:/kunden.txt"));
      
      ArrayList<Kunde> geleseneKunden = dao.readKunden(new File("c:/kunden.txt"));
      for(Kunde k: geleseneKunden){
         System.out.println(k.getName()+" "+k.getVorname()+" "+k.getAdresse());
      }
      
      
   }

}
```

Das könnte man natürlich noch um einiges Verbessern, Exception Handling usw..

Aber im Prinzipt machst du für jede gelesene Zeile ein line.split(","); und weeßt dann die einzelen Teile des array den eigenschaften eines neuen Objektes zu...


----------



## Shin_Sello (2. Sep 2010)

Ähm... Ich will ehrlich sein...
Ich verstehe deinen Code nicht 
Die Klasse Kunden ist ja leicht xD

Aber die zweite Klasse, da versteh ich dein Speichern und lesen nicht, es schaut so ganz anders aus als bei mir...

Mein Speichern:

```
public static void fileSpeichern() {
		File datei = new File(".\\output\\DatenbankFile.txt");
		FileWriter meinFW;
		try {
			meinFW = new FileWriter(datei);
			BufferedWriter writer = new BufferedWriter(meinFW);
			for (int i = 0; i < Fahrzeugliste.size(); i++) {
				if (Fahrzeugliste.get(i) != null) {
					writer.write(Fahrzeugliste.get(i).toString());
					writer.newLine();
				}
			}
			writer.close();
			System.out.println("Das File wurde erfolgreich gespeichert.");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
```

Mein momentanes Lesen:

```
public static void FileLesen() throws FileNotFoundException, IOException {
		try {
			BufferedReader in = new BufferedReader(new FileReader(
					".\\output\\DatenbankFile.txt"));
			boolean istDa = true;
			while (istDa) {
				String s = in.readLine();
				if (s != null) {
					s += in.readLine();
					StringTokenizer st = new StringTokenizer(s);
				     while (st.hasMoreTokens()) {
				         System.out.println(st.nextToken());
				     }

				} else {
					istDa = false;
					in.readLine();
				}
			}
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
```

MfG Shin


----------



## Shin_Sello (2. Sep 2010)

Kann mir jemand helfen dabei??

Ich muss wissen wie das geht mit dem Tokenizer(weil ich ihn leider kaum verstehe )

MfG Shin


----------



## VfL_Freak (3. Sep 2010)

Moin,

schau mal hier:
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 14.13 Tokenizer

Gruß
Klaus


----------



## ARadauer (3. Sep 2010)

Shin_Sello hat gesagt.:


> Ähm... Ich will ehrlich sein...
> Ich verstehe deinen Code nicht



ich würd einfach nicht den Tokenizer nehmen. Sondern Zeile für Zeile lesen, spliten und die Werte setzen


```
String[] parts = line.split(",");
         Kunde kunde = new Kunde();
         kunde.setName(parts[0]);
...
```


----------



## fastjack (3. Sep 2010)

Warum willst Du unbedingt Text speichern, Du kannst das alles viel leichter machen, indem Du serialisiert.

[edit]Oder nimm eine XML-API dafür und schreib/lies XML durch die fertige API.[/edit]


----------



## Shin_Sello (3. Sep 2010)

Weil ich wissen wollte wie es so geht 

Serialisieren ist ja nicht schwer, aber das Lesen vom textFile check ich nicht ^^

MfG Shin


----------

