用Java编程以读取任何文件并查找子字符串,并将其替换为另一个字符串

时间:2014-02-27 14:29:12

标签: java xml string

这是我通过的代码。我想要通过这个来编辑XML文件和代码并添加像|这样的特殊字符(管道)代替&#x7c等等。

    class FileReplace
    {
        ArrayList<String> lines = new ArrayList<String>();
        String line = null;
        public void  doIt()
        {
            try
            {
                File f1 = new File("C:/file.xml");
                FileReader fr = new FileReader(f1);
                BufferedReader br = new BufferedReader(fr);
                while (line = br.readLine() != null)
                {
                    if (line.contains("&#x7c;"))
                        line = line.replace("&#x7c;", "|");
                    lines.add(line);
                }


                FileWriter fw = new FileWriter(f1);
                BufferedWriter out = new BufferedWriter(fw);
                for(String s : lines)
                     out.writeline(s);
                out.flush();

            }
            catch (Exception ex)
            {
                ex.printStackTrace();
            }
        finally {
        fr.close();
        br.close();
        out.close()
        }

        }
        public static void main(String args[])
        {
            FileReplace fr = new FileReplace();
            fr.doIt();
        }
}

我尝试并达到以下错误, enter image description here 请帮忙。感谢

3 个答案:

答案 0 :(得分:1)

这将有效

<强> FileReplace.java

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class FileReplace {
    ArrayList<String> lines = new ArrayList<String>();
    String line = null;

    public void doIt() {
        File f1=null;
        FileReader fr=null;
        BufferedReader br=null;
        FileWriter fw=null;
        BufferedWriter out=null;
        try {
            f1 = new File("src/test.xml");
            fr = new FileReader(f1);
            br = new BufferedReader(fr);
            while ((line = br.readLine()) != null) {
                if (line.contains("&#x7c;"))
                    line = line.replace("&#x7c;", "|");
                lines.add(line);
            }

            fw = new FileWriter(f1);
            out = new BufferedWriter(fw);
            for (String s : lines)
                out.write(s);
            out.flush();

        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            try{
            fr.close();
            br.close();
            out.close();
            }catch(IOException ioe)

            {
                ioe.printStackTrace();
            }
        }

    }

    public static void main(String args[]) {
        FileReplace fr = new FileReplace();
        fr.doIt();
    }
}
运行程序之前

test.xml

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <to>Tove&#x7c;</to>
    <from>Jani</from>
    <heading>Reminder&#x7c;</heading>
    <body>Don't forget me this weekend!</body>
</note>
运行程序后

test.xml

<?xml version="1.0" encoding="UTF-8"?>
<note>
    <to>Tove|</to>
    <from>Jani</from>
    <heading>Reminder|</heading>
    <body>Don't forget me this weekend!</body>
</note>

让我知道你是否面临任何问题......

答案 1 :(得分:0)

Close()更改为close()并关闭finally块中的读者/作者,这样就可以了。

您还可以使用try-with-resources声明。

答案 2 :(得分:-1)

您的类缺少右括号},因此无法解析类文件。

另外,在doIt()中,请勿在try-block中的任何读者或作者上调用close()。终于会很好地为你处理这个问题。 :)

现在,您正在尝试关闭它,然后当所有内容都完成且没有错误时,尝试在finally块中再次关闭已经关闭的读取器或编写器。