假设我将文件重命名A
为 file B
。现在我想测试一下。我可以测试B
存在和A
不存在。但是我需要确保它B
实际上是重命名 A
的。我如何在 Java 中为 Linux 和 Windows 做到这一点。
问问题
1098 次
5 回答
2
- 读取文件 A 的内容。
- 哈希它。
- 重命名文件。
- 读取文件 B 的内容。
- 对其进行散列并将其与文件 A 的散列进行比较。
于 2013-10-14T13:43:26.517 回答
1
您可以比较重命名前后文件的 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()
以独立于平台的方式,这会引发相关异常,以检查文件是否真的被重命名。如果该方法返回目标文件的路径,则说明已正确重命名,否则会抛出异常。你可以参考链接。
于 2013-10-14T13:54:29.723 回答