G
Guest
Gast
Hallo,
ich habe ein Programm geschrieben, dass pdf Dateien liest und aus teilen der pdf dateien html Code erstellt und diesen in eine datei schreibt. Das ganze funktioniert auch bei bis zu 7 Dateien, bei mehr dateien bekomme ich :
Das ganze dürfte an folgender Schleife liegen:
Hier nochmal die Listeelement Funktion:
Es würde mir echt helfen, wenn mir jmd. sagen könnte wie ich die Speichernutzung optimieren kann.
Ich schätze das Problem liegt daran, dass ich immer einen neuen reader erzeuge, aber ka. wie ich das lösen soll.
ich habe ein Programm geschrieben, dass pdf Dateien liest und aus teilen der pdf dateien html Code erstellt und diesen in eine datei schreibt. Das ganze funktioniert auch bei bis zu 7 Dateien, bei mehr dateien bekomme ich :
Code:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2427)
at java.lang.Class.getMethod0(Class.java:2670)
at java.lang.Class.getMethod(Class.java:1603)
at com.lowagie.text.pdf.MappedRandomAccessFile$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.lowagie.text.pdf.MappedRandomAccessFile.clean(Unknown Source)
at com.lowagie.text.pdf.MappedRandomAccessFile.close(Unknown Source)
at com.lowagie.text.pdf.RandomAccessFileOrArray.close(Unknown Source)
at com.lowagie.text.pdf.PRTokeniser.close(Unknown Source)
at com.lowagie.text.pdf.PdfReader.readPdf(Unknown Source)
at com.lowagie.text.pdf.PdfReader.<init>(Unknown Source)
at com.lowagie.text.pdf.PdfReader.<init>(Unknown Source)
at klausurlisterpj.Main.main(Main.java:227)
Java Result: 1
Das ganze dürfte an folgender Schleife liegen:
Code:
if ((datei.isFile()) && (Dateiname.endsWith("pdf"))){
PdfReader reader = new PdfReader(PfadzumVerzeichnis+ListederDateien[0]);
AcroFields form = reader.getAcroFields();
dozent = form.getField("Professor");
ID = form.getField("ID");
pruefungsart = form.getField("Art");
Klausurname = form.getField("Klausurname");
System.out.println(Klausurname);
Studienabschnitt = form.getField("Typ");
Institut = form.getField("Institut");
Seitenzahl = reader.getNumberOfPages();
bla =Seitenzahl % 2;
if (bla == 1)
{
Preis = (Seitenzahl+1)/2 * 0.050 ;
SPreis=String.valueOf(Preis);
if (SPreis.length() > 4){
SPreis=SPreis.substring(0,4);}
}
else
{
Preis = (Seitenzahl)/2 * 0.050;
SPreis=String.valueOf(Preis);
if (SPreis.length() > 4){
SPreis=SPreis.substring(0,4);}
}
//Wann wurde die Datei zuletzt geändert
cal.setTime(new Date(datei.lastModified()));
lastmod = cal.get(Calendar.DATE) + "." +
(cal.get(Calendar.MONTH)+1) + "." +
cal.get(Calendar.YEAR) + " ";
Dateiname = datei.getName();
// jede 2te Zeile soll grau unterlegt sein
color = color * -1;
Listelement(writer,Dateiname,ID,Klausurname,Studienabschnitt,Institut,pruefungsart,dozent,lastmod,Seitenzahl,SPreis,color,option);
}else{}
}
Hier nochmal die Listeelement Funktion:
Code:
public static void Listelement( BufferedWriter writer,String dateiname,String ID,String Klausurname,String Studienabschnitt,String Institut, String artderpruefung, String dozent, String aktualisiert,int seitenzahl,String Preis,int color,int option )
{try{
String colorstring;
String s = "";
if (color > 0)
{ colorstring = "<tr>"; }else{colorstring = "<tr class=grey>";}
dateiname = Umlautchecker(dateiname);
Klausurname = Umlautchecker(Klausurname);
Studienabschnitt = Umlautchecker(Studienabschnitt);
Institut = Umlautchecker(Institut);
artderpruefung = Umlautchecker(artderpruefung);
dozent = Umlautchecker(dozent);
switch(option){
case 0:{
s = colorstring +
"<td><div>"+ dateiname +"</div></td>" +
"<td><div>"+ ID + "</div></td> "+
"<td><div>"+ Klausurname + "</div></td> "+
"<td><div>"+ Studienabschnitt + "</div></td> "+
"<td><div>"+ artderpruefung + "</div></td>"+
"<td><div>"+ Institut + "</div></td> "+
"<td><div>"+dozent +"</div></td>"+
"<td><div>"+aktualisiert+" </div></td>"+
"<td><div>"+seitenzahl+"</div></td>" +
"<td><div>"+Preis+"&"+"</div></td>";}
case 1:{s = colorstring +
"<td><div>"+ ID + "</div></td> "+
"<td><div>"+ Klausurname + "</div></td> "+
"<td><div>"+ Studienabschnitt + "</div></td> "+
"<td><div>"+ artderpruefung + "</div></td>"+
"<td><div>"+dozent +"</div></td>"+
"<td><div>"+aktualisiert+" </div></td>"+
"<td><div>"+seitenzahl+"</div></td>" +
"<td><div>"+Preis+"&"+"</div></td>";}
}
writer.write(s);} catch (IOException e) {
System.out.println("Fehler beim Lesen/Schreiben.");
e.printStackTrace();
}
}
Es würde mir echt helfen, wenn mir jmd. sagen könnte wie ich die Speichernutzung optimieren kann.
Ich schätze das Problem liegt daran, dass ich immer einen neuen reader erzeuge, aber ka. wie ich das lösen soll.