java file.renameTo返回false的原因及解決方案
java file.renameTo返回false原因
需要對文件夾下的文件重命名,發(fā)現(xiàn)返回false了,先用main方法測試,發(fā)現(xiàn)沒問題,如下
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 }
最后發(fā)現(xiàn),是一個文件是用文件流寫的,流沒用close,導(dǎo)致文件重命名失敗了,模擬如下
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)方法,不清楚特性,于是研究了下源碼,發(fā)現(xiàn)底層調(diào)用的是Native方法實現(xiàn)的。
本身帶著對其用法的困惑,寫了一個測試用例來揭開它的神秘面紗,發(fā)現(xiàn)兩個在使用時值得注意的點。
測試用例代碼如下:
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(); } } //調(diào)用renameTo()前 System.out.println(file.exists()); file.renameTo(new File("f:\\2.txt")); //調(diào)用renameTo()后 System.out.println(file.exists()); } }
第一次運行程序,目錄下1.txt和2.txt均不存在
得到結(jié)果如下:
可以看出調(diào)用renameTo前后,1.txt先是存在,然后消失,最后文件夾中生成了2.txt。
為了方便比較第二次結(jié)果,往2.txt寫入些內(nèi)容,“hello world!”(原諒我的中二 ^-^)
第二次運行程序,目錄下已存在2.txt,得到結(jié)果如下:
2.txt中的內(nèi)容并沒有被替換掉,證明此次重命名沒有成功。
總結(jié):
- 如果被重命名的文件已存在,那么renameTo()不會成功
- renameTo()成功后,原文件會被刪除
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringCloud Gateway的熔斷限流配置實現(xiàn)方法
Spring Cloud Gateway支持通過配置熔斷和限流機制來保證服務(wù)的穩(wěn)定性和可用性,可通過Hystrix和Resilience4j兩種方式實現(xiàn)。Hystrix通過注解和配置文件實現(xiàn)熔斷限流,Resilience4j通過編程式配置實現(xiàn)2023-04-04Java使用ffmpeg和mencoder實現(xiàn)視頻轉(zhuǎn)碼
這篇文章主要為大家詳細介紹了Java使用ffmpeg和mencoder實現(xiàn)視頻轉(zhuǎn)碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12spring-boot使用Admin監(jiān)控應(yīng)用的方法
本篇文章主要介紹了spring-boot使用Admin監(jiān)控應(yīng)用的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09java中catalina.home與catalina.base區(qū)別點整理
在本篇文章里小編給大家整理的是關(guān)于java項目中catalina.home與catalina.base區(qū)別點,需要的朋友們可以學(xué)習(xí)下。2020-02-02