如何从.txt获取字符并使用它来替换文件中的其他字符?
问题描述:
我需要更改文件夹中的文件列表中的字符作为输入。对于匹配的字符,我用另一个文件,它为我提供了这样的事情:如何从.txt获取字符并使用它来替换文件中的其他字符?
/A#= A
/A#= A
:A#= A
我使用的串存储每个这些字符在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。
谢谢。
答
如果我不正确地打开你想要的东西。这个问题在本节:
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);
}
或者在没有代码的方式来解释:
- 读取的行只要有行
- 运行替换逻辑
- 将转换后的行写入新文件
+0
我得到了你的代码的NullPointerException,我不明白为什么。 – sublimopopo
只要有输入线可用,请重复这些步骤:1)读取下一行; 2)使用循环应用替换; 3)写出结果。 –