# Files einlesen (XML Files)



## Daelrik (22. Aug 2006)

Hallo erstmal,

ich schreib momentan an einem Programm das mir Excel XML Files durchsucht, bzw. Visio VDX Files (die ja angeblich irgendwie XML sein sollen, aber dann doch nicht..). Was damit passiert ist insofern irrelevant, als das ich den Code momentan auskommentiert habe.
Ich starte momentan eine Mini-GUI mit nem Dateiöffnungs-Dialog, such mir mein File aus, lass es einlesen und wills jetzt - rein zu Testzwecken - gleich wieder ausgeben. Ich musste nämlich feststellen, dass er bei Files die vielleicht 200kb haben ganz gut zurechtkommt - der ganze Vorgang (lesen und was danach kommt) vielleicht 2 Sekunden, war also akzeptabel, aber als ich ihm ein 400kb File geben wollte.. Sendepause, ich teste momentan gerade ein 1,6MB File und das Einlesen allein dauert mehrere Minuten.

Arbeite momentan auf nem recht neuen Laptop (Centrino) und kann mir nicht vorstellen dass es am PC liegt.

Hatte erst mit der Scanner-Class gearbeitet, dh. dem Scanner das File mitgegeben und dann mit hasNextLine() bzw nextLine() gearbeitet, aber in der Hoffnung das es mit BufferedReader besser geht auf den umgewechselt - brachte aber auch nichts.

Wenn ich da so andere Beiträge hier lese wo weitaus größere Files schneller gelesen werden als mein Kram, dann frag ich mich schon ein wenig wieso..

Scanner-Version:


```
public void convertDef(File file) {

Scanner scanner
String content = "";

try {
     scanner = new Scanner(file);

     while(scanner.hasNextLine())
         content += scanner.nextLine;

     System.out.println(content);
}
catch(IOException e) {...}
```

BufferedReader-Version:


```
public void convertDef(File file) {

String content = "";

try {
     FileReader fr = new FileReader(file);
     BufferedReader br = new BufferedReader(fr);

     while ((line = br.readLine()) != null)
         content += line;

     System.out.println(content);
}
catch(IOException e) {...}
```

Kann jetzt sein dass ich irgendwas beim händischen Abtippen vertan hab, aber im Endeffekt sollte das der Code sein.. simpel und doch zu langsam.

edit:

Hab absichtlich keine XML-Klassen benutzt weil ich nicht weiss wie die auf das Visio .vdx Format reagieren - ansich ist es XML, nur irgendwas daran ist falsch, dh. mit Glück kanns ein XML Reader lesen.. aber viel Freude hat er damit nicht. Davon abgesehen weiss ich nicht ob diese Klassen so viel schneller wären als es simpel komplett mit einem Reader einzulesen.


----------



## foobar (22. Aug 2006)

Ersetz mal den String content durch einen StringBuilder.


----------



## Daelrik (23. Aug 2006)

Danke, bin aber auch gleichzeitig auf XML Parsing umgestiegen - geht jetzt doch bedeutend schneller.

Kann man hier als erledigt ansehen


----------

