0

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

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

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

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

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

请建议。

4

4 回答 4

3
  1. 如果大小不同,则代码中存在错误。我可以假设您正在处理文本文件并且没有正确处理换行符。如果要复制文件,则应使用字节。显然这只是假设:您还没有发布任何代码。
  2. 这是对的。新文件只是原始文件的副本。它的最后修改日期是文件最后一次修改的日期,即您完成编写它的日期。改变是使用 File.setLastModifed()方法。
于 2012-05-23T19:04:40.117 回答
2

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

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

希望这可以帮助!

于 2012-05-23T19:04:14.550 回答
1

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

于 2012-05-23T19:05:12.317 回答
0

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

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

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

于 2012-05-23T19:05:35.033 回答