我想做的是..。
我有XML的名称,比如SomeName999999blablabla.xml,有很多内容,其中几乎每一行都包含字符串"999999"。我需要相同的xml文件,其中999999在名称和文件内容中被888888、777777等替换。
问题是..。
我的代码运行良好,实际上创建了我所需的所有文件,但有时会出现一些微小的错误。就像在一行中,E被“随机”替换为D(它似乎总是比它应该的值低一个字母,但我无法确定这一点100%)。它不是很多,就像60个文件中的一两个实例,每个文件大约是100 60。但是,由于它是一个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,正如前面提到的,文件相当大。像100,每行数十万行。
发布于 2015-10-02 09:18:09
这似乎是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()这样的大量使用的函数每调用几百万个方法调用就会随机出错一个字母吗?
https://stackoverflow.com/questions/32884847
复制相似问题