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()成功后,原文件会被删除以上为个人经验,希望能给大家一个参考,也希望大家多多支持好吧啦网。
相关文章:
1. python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例2. python+excel接口自动化获取token并作为请求参数进行传参操作3. Vuex localStorage的具体使用4. docker /var/lib/docker/aufs/mnt 目录清理方法5. 在IDEA中实现同时运行2个相同的java程序6. Python matplotlib画图时图例说明(legend)放到图像外侧详解7. 6个常见的 PHP 安全性攻击实例和阻止方法8. 《CSS3实战》笔记--渐变设计(三)9. Notepad++如何安装Python插件?Notepad++插件怎么装?10. ASP.NET泛型三之使用协变和逆变实现类型转换

网公网安备