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

原始文件和克隆文件的大小不同(java),java,xml,Java,Xml,我正在以以下方式在java代码中克隆xml文件: public boolean isCrcCorrect(Path path) throws IOException, XPathExpressionException { ByteArrayOutputStream output = new ByteArrayOutputStream(); if (!fileData.currentFilePath.equals(path.toString())) { pars

我正在以以下方式在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;
}
public boolean iscrcorrect(路径路径)抛出IOException,XPathExpressionException{
ByteArrayOutputStream输出=新建ByteArrayOutputStream();
如果(!fileData.currentFilePath.equals(path.toString())){
解析文件(路径);
}
列出文件行=文件。readAllLines(路径);
//BufferedWriter bw=新的BufferedWriter(新的OutputStreamWriter(输出));
BufferedWriter bw=new BufferedWriter(新文件编写器(新文件(“f:\\Projects\\iqpdct\\iqpdct domain\\src\\main\\java\\de\\iq2dev\\domain\\util\\debug.xml”);
对于(int i=0;i
我需要在xml中修改属性(对于调试,我在cycle中手动创建)。 我需要这个克隆进行校验和计算结果文件“debug.xml”与源文件相同(InteliJ IDEA这样说),但大小不同源代码:41395,克隆代码:40608,因此我的校验和不正确(CRC32函数)

什么原因会导致这种情况?

只是猜测,但您似乎将新行硬编码为
\n
。您的输入文件是否有可能具有Windows样式的行尾,并且您正在使用代码对其进行修改?

此处不确定……但当您使用
替换行
时,可能正是这一点造成了差异

只要试着不这样做,看看它是否产生相同大小的克隆文件。请帮我试试

此外,正如纪尧姆所说,windows和mac的
\n
差异是否有不同的大小


在完全不同的上下文中,如果我错了,有人会纠正我,但不会自动调用
bw.close()
?我想是的。

让上帝保佑你,好人。这是个问题,行尾。我为此花了将近3个小时。这完全取决于你的意图。我猜你的目标不仅仅是编写一个程序来解析一个文件并输出这个完全相同的文件(如果这是你真正需要的,好消息
cp
已经做到了)。你可能想看看,但主要问题是“你需要哪一行结尾,是否依赖于平台…”。