2017-09-27 9 views
0

J'ai besoin de changer les caractères dans une liste de fichiers dans un dossier que j'ai en entrée. Pour les caractères correspondants, j'utilise un autre fichier qui me donne quelque chose comme ceci:Comment puis-je obtenir des caractères d'un fichier .txt et l'utiliser pour remplacer un autre caractère dans les fichiers?

/a # = á

/A # = Á

: A # = Ä

J'utilise sous-chaîne pour stocker chaque de ces caractères à l'intérieur de 2 tableaux, 1 tableau pour le caractère à remplacer et un autre avec le caractère de remplacement. Ensuite, je fais ceci:

public static void renameFile(File fileOriginal, String[] arrayToConvert, String[] arrayConverted) throws IOException { 
     File destination = new File(fileOriginal + "");   

     try {    File tempFile = File.createTempFile("buffer", ".tmp");   FileWriter fw = new FileWriter(tempFile); 
      Reader fr = new FileReader(fileOriginal); 
      BufferedReader br = new BufferedReader(fr); 

     while (br.ready()) { 
      for(int i = 0; i < arrayToConvert.length ; i++){   
     fw.write(br.readLine().replace(arrayToConvert[i], arrayConverted[i]));      

      }   } 

Mais cela ne fonctionne pas, avant que j'utilisais:

while (br.ready()) { 
      fw.write(br.readLine().replace("#/A#" , "Á"). 
        replace("#/a#" , "á"). 
        replace("#:A#" , "Ä"). 
        replace("#:a#" , "ä") 

Et cela a fonctionné, mais maintenant que je reçois mes personnages d'un fichier, comment dois-je faire pour le faire de la manière la plus efficace? J'utilise Java 1.6.

Merci.

+0

Tant qu'il y a des lignes d'entrée disponibles, répétez ces étapes: 1) Lisez la ligne suivante; 2) appliquer les remplacements en utilisant une boucle; 3) écrivez le résultat. –

Répondre

0

Si je ne comprends pas correctement ce que vous voulez archiver. La question est dans la présente section:

for(int i = 0; i < arrayToConvert.length ; i++){   
    fw.write(br.readLine().replace(arrayToConvert[i], arrayConverted[i]));      
}   

Lorsque vous exécutez le code en lecture seule ligne 0 à arrayToConvert.length et thats pas ce que vous voulez.

Donc, une meilleure façon est de lire chaque ligne et de le convertir.

cela pourrait se faire d'une manière comme ceci:

String s = null; 
while((s = br.readLine()) != null){ 
    for(int i = 0; i < arrayToConvert.length ; i++){   
    s = s.replace(arrayToConvert[i], arrayConverted[i]);      
    } 
    fw.write(s);  
} 

Ou d'expliquer d'une manière non code:

  1. Lire la ligne aussi longtemps que il y a des lignes
  2. exécuter votre remplacer la logique
  3. écrire la ligne convertie dans le nouveau fichier
+0

J'ai reçu NullPointerException avec votre code et je ne comprends pas pourquoi. – sublimopopo