如何从.txt中获取字符并使用它来替换文件中的其他字符?

时间:2017-09-27 10:40:41

标签: java bufferedreader filewriter

我需要更改我输入的文件夹中的文件列表中的字符。对于匹配的字符,我使用另一个文件,它提供了这样的东西:

/ a#=á

/ A#=Á

:A#=Ä

我使用substring将这些字符中的每一个存储在2个数组中,1个数组用于替换字符,另一个用于替换字符。然后我这样做:

 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]));                      

            }           }

但在我使用之前它不起作用:

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

它有效但现在我从文件中获取我的角色,我该怎样做才能以最有效的方式进行?我正在使用java 1.6。

感谢。

1 个答案:

答案 0 :(得分:0)

如果我正确地说出你想要的东西。问题在本节中:

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

执行代码时,只读取第0行到arrayToConvert.length,这不是你想要的。

所以更好的方法是读取每一行并转换它。

这可以通过以下方式完成:

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);       
}

或以非代码方式解释:

  1. 只要有行
  2. ,请阅读该行
  3. 运行您的替换逻辑
  4. 将转换后的行写入新文件