首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 6:复制和操作文件

Java 6:复制和操作文件
EN

Stack Overflow用户
提问于 2015-10-01 10:08:06
回答 1查看 69关注 0票数 0

我想做的是..。

我有XML的名称,比如SomeName999999blablabla.xml,有很多内容,其中几乎每一行都包含字符串"999999"。我需要相同的xml文件,其中999999在名称和文件内容中被888888777777等替换。

问题是..。

我的代码运行良好,实际上创建了我所需的所有文件,但有时会出现一些微小的错误。就像在一行中,E被“随机”替换为D(它似乎总是比它应该的值低一个字母,但我无法确定这一点100%)。它不是很多,就像60个文件中的一两个实例,每个文件大约是100 60。但是,由于它是一个xml,这是一个真正的问题,因为这经常是一个模式冲突,这会在以后的处理中造成崩溃。我完全不知道这是从哪里来的或如何解决它,请帮助。

到目前为止我的密码..。

代码语言:javascript
复制
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,正如前面提到的,文件相当大。像100,每行数十万行。

EN

回答 1

Stack Overflow用户

发布于 2015-10-02 09:18:09

这似乎是String.replace()的一个问题,我已经用StringBuilder替换了它:

代码语言:javascript
复制
  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()这样的大量使用的函数每调用几百万个方法调用就会随机出错一个字母吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32884847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档