# Textdatei durchlesen und bestimmte Wörter ersetzen



## jorgeHX (13. März 2007)

Hallo Leute,
ich will meine Textdatei durchsuchen und dann z.b. gesamte Sätze durch einen anderen Text ersetzen.


z.b. bei folgenden Dummysätzen:


Hallo Peter, was machst du heute Abend?
Grüß dich Jim, was machst du heute Abend?

Bei diesem Satz will ich den String "Peter" suchen und an derselben Stelle durch "Lisa" ersetzen. Gleichzeitig soll "Jim" durch "Stefan" ersetzt werden...


Da gibt es doch sowas wie Pattern oder? Ich weiß nur nicht wie ich es dann an der richtigen Stelle ersetze.

Kann mir da jemand weiterhelfen? Danke,
JP


----------



## MeinerEiner_80 (13. März 2007)

Moin!
Was genau hast du denn vor? Geh mal ein bisschen mehr ins Detail...
Bzw. um mal bei deinem Beispiel zu bleiben, wird Peter immer durch Lisa, und Jim immer durch Stefan ersetzt? 
Wird die Ersetzung Jim -> XXX dadurch bestimmt, wodurch du Peter ersetzt?

*grüssle*
MeinerEiner


----------



## jorgeHX (13. März 2007)

Hi,
ja das Beispiel war doof, gebe ich zu 

Letztendlich will ich aus einem Ordner sämtliche Javadateien (ist ja wie text) laden und dann Beschriftungen von Buttons etc. ersetzen. Wenn also z.B. ein Button momentan JButton myButton = new JButton("Weiter") enthält, will ich durch alle Javadateien durchlaufen und "Weiter" durch "Next" ersetzen.

Schleifen etc. hab ich auch schon gemacht. Ich bräuchte nur nen Anstoß, wie ich die Datei auf "Weiter" durchsuchen kann und dann bei Fund an dieser Stelle durch "Next" ersetzen kann...


War das verständlich?

Danke


----------



## jorgeHX (13. März 2007)

Noch ein kleiner Nachtrag. Gibt es die Möglichkeit einen ganzen Ordner in Java zu laden, so dass dann alle darin enthaltenen Dateien der Reihe nach durchlaufen werden (?) und dann nach Austausch der Begrifflichkeiten unter dem alten Namen abgespeichert werden?

ich weiß die hilfe zu schätzen. Thx


----------



## MeinerEiner_80 (13. März 2007)

Also letztendlich willst du auf eine Internationalisierung deines Programms hinarbeiten, oder? Falls ja schau dir das mal an: http://java.sun.com/docs/books/tutorial/i18n/intro/index.html

Falls es dir nur darum geht, ein für allemal deutsch nach englisch zu übersetzen, würde ich die deutsch -englisch päarchen in einer Properties Datei speichern :http://java.sun.com/j2se/1.4.2/docs/api/java/util/Properties.html
mit den deutschen Wörtern als Key.

```
BufferedReader in=new BufferedReader(new FileInputStream(datei));
String zeile="";
Properties prop = new Properties();
prop.load(new FileInputStream(properties));
KeySet<String> keys = prop.keySet();
while((zeile=in.readLine())!=null){
   Iterator<String> iter = new keys.iterator();
   while(iter.hasNext()){
        String next = iter.next();
        if(zeile.contains(next)){
             zeile.replaceAll(next,prop.get(next)));
        }
    }    
}
```


Was deine zweite Frage angeht, hier im Forum müsste es schon Threads geben, um Ordner-/sDateitrukturen rekursiv durchzulaufen. Und für jede gefundene Datei lässt du dann die obige Methode durchlaufen...


*grüssle*
MeinerEiner


----------



## jorgeHX (13. März 2007)

super. ich probiere es gleich morgen aus... 

Vielen Dank


----------



## jorgeHX (14. März 2007)

Hi,
sag mal, geht dein Code auch richtig?

Es gibt Fehler beim replace, key und FileInputStream

Weißt du da Rat?


----------



## jorgeHX (14. März 2007)

Folgende Fehler kommen:

cannot find symbol; symbol  : constructor BufferedReader(java.io.FileInputStream), location: class java.io.BufferedReader at line 67 (67:18)

cannot find symbol; symbol  : class KeySet, location: class LesenSchreiben at line 76 (76:9)

java.util.Iterator is abstract; cannot be instantiated at line 78 (78:37)


Kann mir da jemand weiterhelfen


----------



## MeinerEiner_80 (14. März 2007)

tüdelü.
tja das kommt davon wenn unsereiner meint, er könne mal schnell so ein bisserl code posten, ohne ihn vorher zu überprüfen 
Verbessert sieht das ganze dann so aus:

```
try{
            BufferedReader in= new BufferedReader(new FileReader(fileToChange));
            String zeile="";
            Properties prop = new Properties();
            prop.load(new FileInputStream(propertiesFile));
            Set<Object> keys = prop.keySet();
            while((zeile=in.readLine())!=null){
                Iterator iter = keys.iterator();
                while(iter.hasNext()){
                    String next = (String) iter.next();
                    if(zeile.contains(next)){
                        zeile = zeile.replaceAll(next,(String) prop.get(next));
                    }    
                }
            }
        }
        catch(Exception e){
            e.printStackTrace();
        }
```


----------



## jorgeHX (14. März 2007)

Also super...

t bei mir nun fast auch.
Allerdings klappt die replace-Methode nicht... Er finde liest aus der Property die Einträge aber ersetzt werden sie nicht...
Liegt es an mir?


----------



## MeinerEiner_80 (14. März 2007)

Moin!
Soweit wie ich das gepostet habe, stimmt das schon alles.. 
Was dir fehlt ist, die Änderungen auch noch zu speichern...dachte das würdest schon hinbekommen..
Nun denn:

```
try{
            BufferedReader in= new BufferedReader(new FileReader(fileToChange));
            BufferedWriter out= new BufferedWriter(new FileWriter(tmpFile));
            String zeile="";
            Properties prop = new Properties();
            prop.load(new FileInputStream(propFile));
            Set<Object> keys = prop.keySet();
            while((zeile=in.readLine())!=null){
                Iterator iter = keys.iterator();
                while(iter.hasNext()){
                    String next = (String) iter.next();
                    if(zeile.contains(next)){
                        zeile = zeile.replaceAll(next,(String) prop.get(next));
                    } 
                    
                }
                out.append(zeile+"\n");
            }
            out.close();
            in.close();
            new File(fileToChange).delete();
            new File(tmpFile).renameTo(new File(fileToChange));
        }
        catch(Exception e){
            e.printStackTrace();
        }
```


*grüssle*
MeinerEiner


----------

