好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java file.renameTo返回false的原因及解决方案

java file.renameTo返回false原因

需要对文件夹下的文件重命名,发现返回false了,先用main方法测试,发现没问题,如下

public static void main ( String [] args ) throws IOException { File file1 = new File ( "D:\\aabb.xml" ); File file2 = new File ( "D:\\ccdd.xml" ); boolean b = file1 . renameTo ( file2 ); System . out . println ( b ); // true }

最后发现,是一个文件是用文件流写的,流没用close,导致文件重命名失败了,模拟如下

public static void main ( String [] args ) throws IOException { File file1 = new File ( "D:\\aabb.xml" ); FileWriter out = new FileWriter ( file1 ); File file2 = new File ( "D:\\ccdd.xml" ); boolean b = file1 . renameTo ( file2 ); System . out . println ( b ); // false }

最终也是很好解决

找个合适的地方close就好了

public static void main ( String [] args ) throws IOException { File file1 = new File ( "D:\\aabb.xml" ); FileWriter out = new FileWriter ( file1 ); out . close (); File file2 = new File ( "D:\\ccdd.xml" ); boolean b = file1 . renameTo ( file2 ); System . out . println ( b ); //true }

java File.renameTo方法,需要注意的坑

最近在接手老项目的时候,遇到File.renameTo(File file)方法,不清楚特性,于是研究了下源码,发现底层调用的是Native方法实现的。

本身带着对其用法的困惑,写了一个测试用例来揭开它的神秘面纱,发现两个在使用时值得注意的点。

测试用例代码如下:

import java . io . File ; import java . io . IOException ; public class TestRenameTo { public static void main ( String [] args ) { File file = new File ( "f:\\1.txt" ); if (! file . isFile ()) { try { file . createNewFile (); } catch ( IOException e ) { e . printStackTrace (); } } //调用renameTo()前 System . out . println ( file . exists ()); file . renameTo ( new File ( "f:\\2.txt" )); //调用renameTo()后 System . out . println ( file . exists ()); } }

第一次运行程序,目录下1.txt和2.txt均不存在

得到结果如下:

可以看出调用renameTo前后,1.txt先是存在,然后消失,最后文件夹中生成了2.txt。

为了方便比较第二次结果,往2.txt写入些内容,[hello world!](原谅我的中二 ^-^)

第二次运行程序,目录下已存在2.txt,得到结果如下:

2.txt中的内容并没有被替换掉,证明此次重命名没有成功。

总结:

如果被重命名的文件已存在,那么renameTo()不会成功 renameTo()成功后,原文件会被删除

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

原文链接:https://zhangshuai.blog.csdn.net/article/details/111405855

查看更多关于java file.renameTo返回false的原因及解决方案的详细内容...

  阅读:33次