Files einlesen (XML Files)

Daelrik

Grünschnabel
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:

Code:
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:

Code:
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.
 
Hallo!

1)
Java:
...
String content = "";
...
while(scanner.hasNextLine())
         content += scanner.nextLine;
ist das voll die Performance-Bremse... verwende besser einen StringBuffer bzw. StringBuilder um den "Content" zwischenzuspeichern.

2) IMHO spricht nichts dagegen die Standard XML APIs von Java oder irgendwelche Third-Party Bibliotheken wie (DOM4J oder JDOM) zu verwenden um diese Excel/Viso-XML Files zu parsen.

Gruß Tom
 
War ja klar, dass Thomas wieder dazwischenfunkt. :D

Jo zum Thema StringBuffer ....

Java:
package de.tutorials;

import java.util.*;
import java.io.*;

public class FileReadTest {
	
	
	public static void main(String args[]){
		
		FileReadTest fr = new FileReadTest();
		
	}
	
	public FileReadTest(){
		
		this.convertDef(new File("c:test.txt"));
		
	}
	
	
	public void convertDef(File file) {

		StringBuffer buf = new StringBuffer();
		
		try {
		     		     
		     BufferedReader br = new BufferedReader(new FileReader(file));
		     
		     Calendar start = Calendar.getInstance();
		     
		     long davor = start.getTimeInMillis();
		     
		     String line;

		     while((line = br.readLine()) != null)
		    	 buf.append(line);
		     
		     Calendar ende = Calendar.getInstance();
		     
		     long danach = ende.getTimeInMillis();
		     
		     long diff = danach - davor;

		     System.out.println("Dauer: " + diff + " ms");
		     
		     // System.out.println(buf);
		 
		}
		catch(IOException e) 
		{
			e.printStackTrace();
		}
	}
}

Und das mit dem XML sehe ich auch genauso ..

Gruß Stefan
 
Zuletzt bearbeitet:
So, danke euch beiden

edit:

der Rest der hier stand zum Thema JDOM hat sich erledigt.. Klein/Groß Problem - peinlich

Thema abgehakt und danke wegen dem XML, geht weitaus einfacher so.
 
Zuletzt bearbeitet:
Zurück