Java 6:复制和操作文件

时间:2015-10-01 10:08:07

标签: java io bufferedreader filewriter

我想做什么......

我的XML文件的名称类似于 SomeName999999blablabla.xml ,内容很多,几乎每一行都包含字符串"999999"。我需要相同的xml文件,其中999999888888替换为777777,依此类推,名称和文件的内容。

问题......

我的代码工作正常,实际上创建了我需要的所有文件,但有时会出现很小的错误。就像在一行中一样,E被“随机”替换为D(它似乎总是比它应该的低一个字母,但我不能确认100%)。它不是很多,比如60个文件中的一个或两个实例,每个文件大约100MB。但由于它是一个xml,这是一个真正的问题,因为这通常是一个模式违规,这会导致后续处理崩溃。 我完全不知道它来自何处或如何解决它,请帮助。

到目前为止我的代码......

private void createMandant(String mandant) throws Exception {
    String line;
    File dir = new File(TestConstants.getXmlDirectory());

    for (File file : dir.listFiles()) {
        if (file.getName().endsWith((".xml")) && file.getName().contains("999999")) {
            BufferedReader br = new BufferedReader(new FileReader(file));
            FileWriter fw = new FileWriter(file.getAbsolutePath().replace("999999", mandant));

            while ((line = br.readLine()) != null) {
                fw.write(line.replace("999999", mandant) + "\r\n");
            }

            br.close();
            fw.close();
        }
    }
}

环境...

我们使用的是Java 6.如前所述,文件非常大。像100MB,每条数十万行。

1 个答案:

答案 0 :(得分:0)

String.replace()似乎有问题 我用StringBuilder取代了它:

  while ((line = br.readLine()) != null) {
                index = 0;
                // fw.write(line.replace("999999", mandant) + "\r\n");
                StringBuilder builder = new StringBuilder(line);
                index = builder.indexOf("999999");
                if (index > 0) {
                    fw.write(builder.replace(index, index + 6, mandant).toString() + "\r\n");
                } else {
                    fw.write(line + "\r\n");
                }
            }

......现在似乎有效了。两次运行已经完成,没有任何问题。

但这似乎很奇怪。可能真的是像String.replace()这样频繁使用的函数只是每隔几百万个方法调用就会随机获取单个字母错误吗?