读书人

请慎用java的File#renameTo(File)步骤

发布时间: 2012-09-07 10:38:15 作者: rapoo

请慎用java的File#renameTo(File)方法 & renameTo方法举例

The same thing would happen on Windows if you tried to renameTo a different drive, i.e. C: -> D:

终于明白咯。

做个实验:

?请慎用java的File#renameTo(File)步骤 & renameTo方法举例

结果:

?请慎用java的File#renameTo(File)步骤 & renameTo方法举例source file is exist? true, source file => c:\test.txte:\test.txt is exist? falserename to e:\test.txt => falsesource file is exist? true, source file => c:\test.txtd:\test.txt is exist? falserename to d:\test.txt => true

注意看结果,从C盘到E盘失败了,从C盘到D盘成功了。因为我的电脑C、D两个盘是NTFS格式的,而E盘是FAT32格式的。所以从C到E就是上面文章所说的"file systems"不一样。从C到D由于同是NTFS分区,所以不存在这个问题,当然就成功了。

果然是不能把File#renameTo(File)当作move方法使用。

可以考虑使用apache组织的commons-io包里面的FileUtils#copyFile(File,File)和FileUtils#copyFileToDirectory(File,File)方法实现copy的效果。至于删除嘛,我想如果要求不是那么精确,可以调用File#deleteOnExit()方法,在虚拟机终止的时候,删除掉这个目录或文件。

BTW:File是文件和目录路径名的抽象表示形式,所以有可能是目录,千万小心。 &&&& -- M? File f = new File("d:/Test/name");? File f2 = new File("d:/name2");
??System.out.println(f.renameTo(f2));
??System.out.println(f.getAbsolutePath());//f仍然指向原来的路径,但此时f原来所指的目录或文件已经不再了
??
??//File f3 = new File("d:/Test/name");
??//System.out.println(f.renameTo(f3));//第二次重命名不行了 ,因为f仍然指向原来的路径
??
??File f3 = new File("d:/name3");
??if(!f.exists()){????????????????????????????? //File对象执行完renameTo后,该对象表示的文件或目录就不存在了,被move了
???System.out.println("f not exists");
??}
??System.out.println(f.renameTo(f3));//false,f所指的文件或目录不存在??
??System.out.println(f2.renameTo(f));//执行完后,恢复原样
??System.out.println(f2.getAbsolutePath());

读书人网 >编程

热点推荐