【问题标题】:Check if a file is already copied检查文件是否已被复制
【发布时间】:2012-05-30 08:51:40
【问题描述】:

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

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

  1. 文件大小(源文件和目标文件)。
  2. 上次修改时间戳。

但是,我在 Java 中执行此操作时遇到以下问题:

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

请提出建议。

【问题讨论】:

  • 为什么不检查新目的地的文件是否存在?
  • @Guillaume - 检查文件是否存在不足以确定文件是否已更改。
  • 考虑查看 Ant 的 Copy 任务的源代码,因为它执行相同的操作。 ant.apache.org/manual/Tasks/copy.html
  • @Guillaume 这是要求,因为源文件夹正在逐步添加文件。当我的程序复制时,它会检查相同的文件(名称、大小和日期)是否相同,否则再次复制。
  • 啊好吧,我明白了,我想你可以检查 md5sum 而不是 size !

标签: java file-io io file-handling


【解决方案1】:

通常你会计算原始文件的 MD5 和并将其与目标文件的 MD5 和进行比较,如果它们相等,那么你就可以开始了。

其他简单的技术是复制文件并在复制时附加一个后缀,在复制它的过程完成后,删除文件名上的后缀,这样在这种情况下您只需检查文件是否存在。

希望这会有所帮助!

【讨论】:

    【解决方案2】:
    1. 如果大小不同,您的代码中就有错误。我可以假设 您正在处理文本文件并且没有正确处理 new 行字符。如果你想复制你应该使用的文件 字节。显然这只是假设:你还没有发布任何 你的一段代码。
    2. 这是正确的。新文件只是原始文件的副本。 它的最后修改日期是 this 文件最后的日期 修改,即当你完成编写它时。改变就是使用 File.setLastModifed() 方法。

    【讨论】:

    • 感谢您的回答!这有帮助。我的程序中有一个错误:)
    【解决方案3】:

    您还需要复制属性,我知道 Files 类有一个复制属性选项:http://docs.oracle.com/javase/tutorial/essential/io/copy.html

    【讨论】:

      【解决方案4】:

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

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

      另一种方法是使用文件类的 lastModified 方法...第一个似乎是更好的选择

      【讨论】:

        猜你喜欢
        • 2012-04-09
        • 1970-01-01
        • 1970-01-01
        • 2014-08-15
        • 2015-09-12
        • 2017-04-27
        • 2021-02-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多