原始文件和克隆文件之间的大小不同(java)

时间:2014-11-01 12:22:48

标签: java xml

以这种方式克隆我的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功能)
是什么导致这种情况?

2 个答案:

答案 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()?我以为是的。