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()成功后,原文件会被删除
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringMvc @RequestParam 使用推荐使用包装类型代替包装类型
这篇文章主要介绍了SpringMvc @RequestParam 使用推荐使用包装类型代替包装类型,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-02-02
Java开发druid数据连接池maven方式简易配置流程示例
本篇文章主要为大家介绍了java开发中druid数据连接池maven方式的简易配置流程示例,文中附含详细的代码示例,有需要的朋友可以借鉴参考下,希望能够有所帮助2021-10-10
详解IDEA中SpringBoot整合Servlet三大组件的过程
这篇文章主要介绍了详解IDEA中SpringBoot整合Servlet三大组件的过程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-11-11
教你安装eclipse2021并配置内网maven中心仓库的图文详解
本文能通过图文并茂的形式给大家介绍安装eclipse2021并配置内网maven中心仓库的相关知识,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2021-09-09


最新评论