2013-10-14 126 views
0

假设我将文件A重命名为B。现在我想测试吧。 我可以测试B存在和A没有。不过,我需要确保B实际上是更名为A。我怎样才能用Java和Linux来做到这一点。如何在Java中测试重命名

+0

难道你不需要做一些低级别的东西与inode?超越java的范围。 – Bathsheba

+0

是的,inode是我想检查的内容。但是,我担心我不能用Java(以便携方式)来做到这一点。 – Michael

回答

2
  • 读取文件A.
  • Hash it的内容。
  • 重命名文件。
  • 读取文件B.内容
  • 哈希它和比较,以文件A.
+0

谢谢。如果A和B是_folders_而不是文件? – Michael

+0

@Michael在这种情况下,我会[相信由File.renameTo(File)]返回的布尔值(http://stackoverflow.com/a/19361763/1288)。 –

+0

是的,但是如果我需要测试一个应该调用_renameTo_的函数呢?我想确保_renameTo_被调用。 – Michael

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

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

相反,你可以使用

​​ 在平台独立的方式

,这会因您检查相关异常文件是否真的被重命名。如果该方法返回到目标文件的路径,则它已被正确重命名,否则会引发异常。你可以参考这个链接。

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