Java 检查文件是否已复制

Java 检查文件是否已复制,java,file-io,io,file-handling,Java,File Io,Io,File Handling,我正在写一个复制文件的小程序。程序检查要复制的文件是否已复制到目标位置 为了验证是否存在相同的文件,我将比较以下两件事: 文件的大小(源文件和目标文件的大小) 最后修改的时间戳 但是,我在Java中执行此操作时遇到以下问题: 当使用Java IO(输入/输出流)复制文件时,File.length不会返回相同的数字(存在1的差异) 使用Java IO复制文件时,复制文件的最后修改时间戳是当前日期/时间,而不是原始日期/时间 请建议。通常,您会计算原始文件的MD5和,并将其与目标文件的MD5和进行比

我正在写一个复制文件的小程序。程序检查要复制的文件是否已复制到目标位置

为了验证是否存在相同的文件,我将比较以下两件事:

  • 文件的大小(源文件和目标文件的大小)
  • 最后修改的时间戳
  • 但是,我在Java中执行此操作时遇到以下问题:

  • 当使用Java IO(输入/输出流)复制文件时,File.length不会返回相同的数字(存在1的差异)
  • 使用Java IO复制文件时,复制文件的最后修改时间戳是当前日期/时间,而不是原始日期/时间

  • 请建议。

    通常,您会计算原始文件的MD5和,并将其与目标文件的MD5和进行比较,如果它们相等,则可以继续

    另一个简单的方法是复制文件,并在复制时为其添加后缀,在复制过程完成后,删除文件名上的后缀,这样您就只需检查文件是否存在


    希望这有帮助

    通常情况下,您会计算原始文件的MD5和,并将其与目标文件的MD5和进行比较,如果它们相等,则可以继续

    另一个简单的方法是复制文件,并在复制时为其添加后缀,在复制过程完成后,删除文件名上的后缀,这样您就只需检查文件是否存在

    希望这有帮助

  • 如果大小不同,则代码中存在错误。我可以这么想 您正在处理文本文件,无法正确处理新文件 行字符。如果要复制文件,应使用 字节。显然,这只是假设:您没有发布任何 你的一段代码
  • 这是正确的。新文件只是原始文件的副本。 其上次修改日期是此文件上次修改的日期 修改,即当您完成编写时。改变就是使用
    File.setLastModified()
    方法
  • 如果大小不同,则代码中存在错误。我可以这么想 您正在处理文本文件,无法正确处理新文件 行字符。如果要复制文件,应使用 字节。显然,这只是假设:您没有发布任何 你的一段代码
  • 这是正确的。新文件只是原始文件的副本。 其上次修改日期是此文件上次修改的日期 修改,即当您完成编写时。改变就是使用
    File.setLastModified()
    方法

  • 您还需要复制属性,我知道Files类有一个复制属性选项:

    您还需要复制属性,我知道Files类有一个复制属性选项:

    要将一个文件复制到另一个文件,您可以使用任何类,但是我不明白为什么需要使用时间戳来检查文件是否已经被复制

    您可以检查目标文件和源文件的内容,如果它们匹配,则复制该文件;如果不匹配,则不复制该文件


    另一种方法是使用file类的lastModified方法。。。对于将一个文件复制到另一个文件,第一个似乎是更好的选择。您可以使用任何类,但我不理解为什么需要使用时间戳来检查文件是否已被复制

    您可以检查目标文件和源文件的内容,如果它们匹配,则复制该文件;如果不匹配,则不复制该文件


    另一种方法是使用file类的lastModified方法。。。第一个似乎是一个更好的选项

    为什么你不检查新的目的地中的文件是否存在?@纪尧姆-检查文件是否存在并不足以确定文件是否已经改变。考虑看Ant的复制任务的来源,因为它做了同样的事情。Guillaume这是必需的,因为源文件夹正在递增地添加文件。当我的程序复制时,它会检查相同的文件(名称、大小和日期)是否相同,否则会再次复制。啊,好吧,我明白了,我想你可以检查md5sum而不是大小!为什么不检查新目的地中的文件是否存在?@纪尧姆-检查文件是否存在并不足以确定文件是否已更改。请考虑Ant的复制任务的来源,因为它做了同样的事情。Guillaume这是必需的,因为源文件夹正在递增地添加文件。当我的程序复制时,它会检查相同的文件(名称、大小和日期)是否相同,否则会再次复制。啊,好吧,我明白了,我想你可以检查md5sum而不是大小!谢谢你的回答!这很有帮助。我的程序中有一个错误:)谢谢你的回答!这很有帮助。我的程序中有一个错误:)