# große Datei einlesen!



## StarJ2 (12. Jul 2007)

Hallo zusammen! 

Ich habe ein kleines Problem und finde einfach keine Lösung. Ich hoffe ihr könnt mir helfen.

Ich versuche eine Datei um die 20GB groß, Zeilen weise einzulesen. Ich habe das Programm unter MAC OSX getestet und greife auf eine Festplatte zu, die im NTFS Format formatiert ist. Soweit funktioniert das Programm auch unter OSX einwandfrei! :lol: 

Sobald jetzt Microsoft ins Spiel kommt entstehen Probleme.  Wenn ich das gleiche Programm unter Windows XP SP2 starte und die gleiche Datei auf der gleichen Festplatte einlese, bricht das Programm ohne eine Fehlermeldung ab! Ich gehe davon aus das die while-Schleife beendet wird! Aber warum? Den Sourcecode habe ich mit angehängt.



```
String tmp = "";
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
			
while (br.ready()) {
	tmp = br.readLine();
}
```


----------



## The_S (12. Jul 2007)

Versuchs mal so


```
while ((tmp = br.readLine()) != null);
```


----------



## SlaterB (12. Jul 2007)

gib doch mal 
System.out.println("ready?: "+br.ready());
aus sowie weitere Ausgaben an wichtigen Stellen, insbesondere kurz vorm Ende,
um falsch-abgefange Exceptions auszuschließen

probiere das ganze mit einer 1 KB großen Datei, gehts damit?
dann 1 MB, 10 MB usw.,
finde doch heraus, wo die Grenze liegt

einfach nur 'geht nicht' ist bisschen dürftig


----------



## JPKI (12. Jul 2007)

Oder so:

```
BufferedReader reader = ...
StringBuffer buffer = new StringBuffer();

for (String s = reader.readLine(); s != null; s = reader.readLine()) {
 buffer.append(s);
 buffer.append("\n");
}
```


----------



## The_S (12. Jul 2007)

JPKI hat gesagt.:
			
		

> Oder so:
> 
> ```
> BufferedReader reader = ...
> ...



Öhm ... nein ... würde ich definitiv nicht so probieren


----------



## Gast (12. Jul 2007)

20 GB in nen stringbuffer zu klatschen geht zwar theoretisch recht flott, aber praktisch wird dir der heap space sehr schnell ausgehen und die jvm fliegt dir um die ohren


----------



## JPKI (12. Jul 2007)

Tja... da gibts nur eins: RAM kaufen :wink:


----------



## StarJ2 (12. Jul 2007)

Habs hinbekommen! Es hängt wohl tatsächlich daran das die Funktion br.ready() false zurückliefert, obwohl die Datei noch nicht zu ende gelesen wurde.
Der Vorschlag von Hobbit_Im_Blutrausch führte zum Erfolg!



```
while ((tmp = br.readLine()) != null);
```


Vielen Dank für die zahlreiche Hilfe


----------

