am以这样的方式在我的java代码中克隆xml文件:
public boolean isCrcCorrect(Path path) throws IOException, XPathExpressionException {
ByteArrayOutputStream output = new ByteArrayOutputStream();
if (!fileData.currentFilePath.equals(path.toString())) {
parseFile(path);
}
List<String> file_lines = Files.readAllLines(path);
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(output));
BufferedWriter bw = new BufferedWriter(new FileWriter(new File("f:\Projects\iqpdct\iqpdct-domain\src\main\java\de\iq2dev\domain\util\debug.xml")));
for (int i = 0; i < file_lines.size(); i++) {
if (i != 0) {
bw.write("n");
}
if (file_lines.get(i).equals(" <Stamp crc="3916602279"><Checker name="IODD-Checker V1.1.1" version="V1.1.1.0"/></Stamp>")) {
bw.write(" <Stamp crc=""><Checker name="IODD-Checker V1.1.1" version="V1.1.1.0"/></Stamp>");
} else {
bw.write(file_lines.get(i));
}
System.out.println(file_lines.get(i));
}
bw.flush();
bw.close();
crc.reset();
crc.update(output.toByteArray());
//debug
System.out.println(crc.getValue());
System.out.println(fileData.file_crc);
//return fileData.file_crc == crc.getValue();
return false;
}
我需要修改xml中的属性(为了调试,我手动在循环中创建了它)。我需要此克隆进行校验和计算结果文件"debug.xml"与源文件相同(InteliJ IDEA告诉我们),但大小不同:源:41395,克隆:40608,因此我的校验和(CRC32函数)不正确
是什么原因造成的?
只是猜测,但您似乎将新行硬编码为n
。你的输入文件可能有Windows风格的行尾,而你正在用代码修改它们吗?
这里不确定。。。但当你用<Stamp crc=""><Checker name="IODD-Checker V1.1.1" version="V1.1.1.0"/></Stamp>
替换<Stamp crc="3916602279"><Checker name="IODD-Checker V1.1.1" version="V1.1.1.0"/></Stamp>
行时,也许这就是造成差异的原因?
试着不这样做,看看它是否会产生相同大小的克隆文件。请帮我试试。
此外,正如纪尧姆所说,windows和mac的n
差异是否有不同的大小?
在一个完全不同的上下文中,如果我错了,有人会纠正我,但bw.close()
不是自动调用bw.flush()
吗?我想是的。