0

假设我将文件重命名A为 file B。现在我想测试一下。我可以测试B存在和A不存在。但是我需要确保它B实际上是重命名 A的。我如何在 Java 中为 Linux 和 Windows 做到这一点。

4

5 回答 5

2
  • 读取文件 A 的内容。
  • 哈希它
  • 重命名文件。
  • 读取文件 B 的内容。
  • 对其进行散列并将其与文件 A 的散列进行比较。
于 2013-10-14T13:43:26.517 回答
1

您可以比较重命名前后文件的 MD5 校验和。

请参阅在 Java 中获取文件的 MD5 校验和

于 2013-10-14T13:46:45.607 回答
1

为什么不相信File.renameTo(File)返回的布尔值,它指示重命名是否有效?

于 2013-10-14T13:48:00.630 回答
1
import java.io.File;

public class Main {
   public static void main(String[] args) {
      File oldName = new File("C:/java1.txt");
      File newName = new File("C:/java2.txt");
      if(oldName.renameTo(newName)) {
         System.out.println("renamed");
      } else {
         System.out.println("Error");
      }
   }
}

现在进行确认,您可以将文件内容存储在两个文件的字符串中,例如

 String contentOld = new Scanner(new File("java1.txt")).useDelimiter("\\Z").next();


String contentNew = new Scanner(new File("java2.txt")).useDelimiter("\\Z").next();

现在比较两个字符串,你会得到结果

contentOld.equals(contentNew)

如果两者具有相同的内容,它将返回 true

于 2013-10-14T13:49:49.717 回答
0

很简单

if(B.exists()) throw new java.io.IOException("file already exists");

boolean success = A.renameTo(B);
if (success) {
   // File is successfully renamed.
}

但这种方式是平台相关的 API 提到:http ://docs.oracle.com/javase/7/docs/api/java/io/File.html#renameTo%28java.io.File%29

相反,您可以使用

Files.move()

以独立于平台的方式,这会引发相关异常,以检查文件是否真的被重命名。如果该方法返回目标文件的路径,则说明已正确重命名,否则会抛出异常。你可以参考链接。

http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#move%28java.nio.file.Path,%20java.nio.file.Path,%20java。 nio.file.CopyOption...%29

于 2013-10-14T13:54:29.723 回答