java|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。
【java|java file.renameTo返回false的原因及解决方案】为了方便比较第二次结果,往2.txt写入些内容,“hello world!”(原谅我的中二 ^-^)
文章图片
第二次运行程序,目录下已存在2.txt,得到结果如下:
文章图片
文章图片
文章图片
2.txt中的内容并没有被替换掉,证明此次重命名没有成功。
总结:
- 如果被重命名的文件已存在,那么renameTo()不会成功
- renameTo()成功后,原文件会被删除
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用
- Java基础-高级特性-枚举实现状态机