# Große Dateien einlesen - Objekte speichern



## rausda (8. Januar 2008)

Mohoin,

ich habe (eigentlich) folgendes Ziel und somit ein Problem:

Ich möchte eine csv-Datei einlesen, die einzelnen Zeilen bearbeiten und in einem Vector zwischenspeichern.

Problematik:

Bis zu einer bestimmten Zeilenanzahl ist das auch alles kein problem. Leider hab ich jetzt auch Dateien mit 100.000 und mehr Zeilen und Java zeigt mir dann eine "Java Heap space - OutOfMemoryError"-Exception an.

Idee:

Ich dachte mir die Zeilen einzeln auszulesen, diese dann für den weiteren Programmverlauf zu bearbeiten und dann als Objekte in eine neue Datei zu schreiben/zwischen zu speichern. Funktioniert leider nicht!

Hier mal im groben was passieren soll (muss leider abtippen - also Schreibfehler garantiert ):


```
RandomAccessFile f;
ObjectOutputStream o;

try{
  f = new RandomAccessFile("ort der csv datei","r");
  o = ObjectOutputStream(new FileOutputStream("zieldatei"));
  for(String line; (line = f.readLine()) != null;){
     o.writeObject(line);
  }
  o.close();
  f.close();
} catch( FileNotFoundException ex ) {
} catch( IOException ex ){
}
```

Im "richtigen" Quelltext werden wie gesagt die einzelnen Zeilen noch bearbeitet und dann das eingentliche Object draus gemacht. (Will also nicht die Datei Kopieren!).
Mir scheint es so, dass das Objekt nach dem schreiben immer noch im Speicher verbleibt.

Frage: gibt es eine (andere) Möglichkeit mit großen Dateien direkt umzugehen? Wie kann ich die in der Datei gespeicherten Objekte aus dem Java Speicher bekommen?

P.S.: den Java Speicher beim starten zu erhöhen ist keine Lösung, da auch noch größere Dateien zu erwarten sind bzw. die verwendete Hardware auf dem Benutzer PC unterschiedlich und unbekannt ist.

Vll hat ja jemand ne idee.


----------

