Hi zusammen,
ich hab hier ein kleines Tool gebastelt, mit dem es mir möglich ist, genau den ersten Treffer in einer htm- bzw. html-Datei zu ersetzen. Mein Problem ist jetzt allerdings, dass das Tool zwar sehr gut funktioniert, aber leider nur, wenn es sich um eine Hand voll Dateien handelt - bei ca. 200 Dateien ist Schluss und es gibt folgende Fehlermeldung: Exception in Thread "Main" Java.lang.OutOfMemoryError: Java Heap Space
Hier der Code:
Ich bin mir durchaus bewusst, dass das Tool keine Meisterleistung ist, aber bevor ich 10.000 Dateien, um die es wirklich geht, von Hand anfasse kann ich auch mit einem unperformanten Tool leben und lieber eine halbe Stunde Kaffee trinken gehen .
Wäre jemand so lieb und würde mir dabei helfen, das Tool für 10.000 Dateien fit zu machen?
Grüße,
muemmel
ich hab hier ein kleines Tool gebastelt, mit dem es mir möglich ist, genau den ersten Treffer in einer htm- bzw. html-Datei zu ersetzen. Mein Problem ist jetzt allerdings, dass das Tool zwar sehr gut funktioniert, aber leider nur, wenn es sich um eine Hand voll Dateien handelt - bei ca. 200 Dateien ist Schluss und es gibt folgende Fehlermeldung: Exception in Thread "Main" Java.lang.OutOfMemoryError: Java Heap Space
Hier der Code:
Code:
import java.util.*;
import java.util.regex.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ImgRegEx extends JFrame{
JLabel lblPfad = new JLabel("Pfad: ");
JTextField inPfad = new JTextField();
JButton go = new JButton("Go !");
JLabel lblMuster = new JLabel("Suche: ");
JTextField inMuster = new JTextField();
JLabel lblRep = new JLabel("Ersetze: ");
JTextField inRep = new JTextField();
JLabel lblZeig = new JLabel();
Pan pan = new Pan();
ImgRegEx() {
super();
setTitle("ImgRegEx");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initLaF();
setLayout(new BorderLayout());
getContentPane().add(pan, BorderLayout.CENTER);
}
public class Pan extends JPanel {
JTextArea textfeld = new JTextArea(20,30);
Pan() {
super();
setLayout(null);
lblMuster.setBounds(10,10,50,20);
add(lblMuster);
inMuster.setBounds(60,10,700,20);
add(inMuster);
lblRep.setBounds(10,40,50,20);
add(lblRep);
inRep.setBounds(60,40,700,20);
add(inRep);
lblPfad.setBounds(10,60,50,40);
add(lblPfad);
inPfad.setBounds(60,70,700,20);
add(inPfad);
go.setBounds(10,100,200,20);
add(go);
go.addActionListener(new Liste());
lblZeig.setBounds(220,100,500,20);
add(lblZeig);
textfeld.setBounds(10,130,770,190);
add(textfeld);
}
}
class Liste implements ActionListener{
public void actionPerformed(ActionEvent ae) {
String p = inPfad.getText();
File f = new File(p);
listen(f);
}
}
class DateiFilter implements FileFilter {
private String ende1, ende2;
public DateiFilter(String endung1, String endung2) {
ende1 = endung1;
ende2 = endung2;
}
public boolean accept(File dat) {
if(dat.isDirectory() == true) {
return true;
}
else {
if(dat.getName().endsWith(ende1) == true || dat.getName().endsWith(ende2) == true) {
return true;
}
else {
return false;
}
}
}
}
static void listen(File dir) {
DateiFilter filter = new DateiFilter(".html",".htm");
File[] dateien = dir.listFiles(filter);
if(dateien != null) {
for(int i=0; i<dateien.length; i++) {
//System.out.println(dateien[i].getAbsolutePath());
lblZeig.setText(dateien[i].getAbsolutePath());
if(dateien[i].isDirectory()) {
System.out.println(dateien[i].getAbsolutePath());
lblZeig.setText(dateien[i].getAbsolutePath());
listen(dateien[i]);
}
}
}
for(int j=0; j<dateien.length; j++) {
try {
BufferedReader rein = new BufferedReader(new FileReader(dateien[j]));
StringBuffer puffer = new StringBuffer();
String zeile;
while((zeile = rein.readLine()) != null) {
puffer.append(zeile);
puffer.append('\n');
}
rein.close();
String inhalt = new String(puffer);
pan.textfeld.setText("");
pan.textfeld.setText(inhalt);
pan.textfeld.setCaretPosition(0);
pan.textfeld.selectAll();
String regMus = inMuster.getText();
String repText = inRep.getText();
Pattern p = Pattern.compile(regMus);
Matcher m = p.matcher(pan.textfeld.getSelectedText());
String result = m.replaceFirst(repText);n
pan.textfeld.selectAll();
pan.textfeld.setText(result);
BufferedWriter raus = new BufferedWriter(new FileWriter(dateien[j]));
pan.textfeld.selectAll();
String merk = pan.textfeld.getSelectedText();
raus.write(merk);
raus.close();
}
catch(Exception e) {
}
}
}
public void initLaF() {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
SwingUtilities.updateComponentTreeUI(this);
SwingUtilities.updateComponentTreeUI(pan);
}
catch(Exception c){
}
}
public static void main (String [] args) {
JFrame fenster = new ImgRegEx();
fenster.setSize(800,360);
fenster.setLocation(200,200);
fenster.setVisible(true);
fenster.setResizable(false);
}
}
Ich bin mir durchaus bewusst, dass das Tool keine Meisterleistung ist, aber bevor ich 10.000 Dateien, um die es wirklich geht, von Hand anfasse kann ich auch mit einem unperformanten Tool leben und lieber eine halbe Stunde Kaffee trinken gehen .
Wäre jemand so lieb und würde mir dabei helfen, das Tool für 10.000 Dateien fit zu machen?
Grüße,
muemmel