以这种方式克隆我的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”与source相同(InteliJ IDEA告诉他们),但大小不同:
来源:41395,克隆:40608 ,因此我的校验和不正确(CRC32功能)
是什么导致这种情况?
答案 0 :(得分:1)
只是一个猜测,但您似乎将新行硬编码为\n
。您的输入文件是否可能具有Windows样式行结尾,并且您正在使用代码修改它们?
答案 1 :(得分:0)
此处不确定...但是当您使用<Stamp crc=\"3916602279\"><Checker name=\"IODD-Checker V1.1.1\" version=\"V1.1.1.0\"/></Stamp>
替换行<Stamp crc=\"\"><Checker name=\"IODD-Checker V1.1.1\" version=\"V1.1.1.0\"/></Stamp>
时,或许这会导致差异?
试着不要这样做,看看它是否产生相同大小的克隆文件。请帮我。
此外,正如纪尧姆所说,\n
对于Windows和Mac的区别有不同吗?
在一个完全不同的背景下,如果我错了,有人会纠正我,但bw.close()
没有自动调用bw.flush()
?我以为是的。