java 快速删除文件夹_java File删除文件夹完整版
經常寫代碼,應該能遇到這樣一個問題,需要用java刪除某個文件夾,如果文件夾下面有子文件夾或文件,可能子文件夾下面還有文件或者文件夾的話,這樣直接是刪不掉的,什么意思呢,我查遍java file的api,當文件夾下面還存在文件時,并沒有直接提供方法刪除。為了省事,剛才隨便百度了一個,代碼比較長,由于我需要刪除的子文件夾中存在以“.”開頭的文件,于是并不能刪除。最后靜下來自己寫了一個,總共代碼就十行左右,但是和一般人的思路都不太一樣。
private void deleteFile(String fileName){
File file = new File(fileName);
if(file.exists()){
file.delete();
}
if(file.exists()){
String[] paths = file.list();
for(String str:paths){
deleteFile(fileName+"\\"+str);
}
file.delete();
}
}
這樣確實解決了問題,但是細想下,里面還是有些問題的,java不讓刪除有子文件的文件夾,估計也是為了安全考慮,沒有任何提示,一旦刪除,那就真沒了。那我們來稍微修改下代碼:
private void deleteFile(String fileName,boolean isForceDelete){
File file = new File(fileName);
if(file.exists()){
file.delete();
}
if(file.exists()){
if(!isForceDelete){
return;
}
String[] paths = file.list();
for(String str:paths){
deleteFile(fileName+"\\"+str,isForceDelete);
}
file.delete();
}
}
傳這樣一個參數,是否強制刪除,如果文件夾下面還是文件夾,那就不刪除,只要傳一個boolean型的參數false就解決了問題。
看到這,本以為解決了問題,其實還沒有,你知道遞歸的執行效率很低,并且對資源的占用情況隨著任務規模的擴大,對資源的占用將呈幾何式增長么,你想一下,如果目標文件夾下面存在大量的層級比較深的文件和文件夾時,這時候的執行效率是比較低的,而且很占資源。一旦你選擇了遞歸算法,我覺得執行效率沒啥改變了,但是資源占用方面可以有所改變,因此可以從這方面考慮下。這時候不用疑惑,java的GC線程雖然是實時的在檢測著,但是一旦系統規模大了,難免有些照應不過了,因此有些垃圾對象可能會刪除的有點遲,這里可以查一下,gc回收垃圾的機制有一種是查詢對象是否還有被引用,一旦沒有被引用,則立即啟用回收,準備回收,于是我們可以稍微再改下代碼:
private void deleteFile(String fileName,boolean isForceDelete){
File file = new File(fileName);
if(file.exists()){
file.delete();
}
if(file.exists()){
if(!isForceDelete){
return;
}
String[] paths = file.list();
for(String str:paths){
deleteFile(fileName+"\\"+str,isForceDelete);
}
file.delete();
paths = null;// lets gc do its works
}
file = null;// lets gc do its works
}
這樣問題應該徹底解決了,雖然我也只是一名菜鳥,但是平時就應該用這樣的標準要求自己,平時多研究下,隨著經驗的積累,總一天別人也會叫你"大牛"、"*哥",至于lets gc do its works 這樣的注釋寫法源于java 源碼,java源碼都是開放的,建議大家沒事多研究下java源碼,里面有很多經典的代碼。
總結
以上是生活随笔為你收集整理的java 快速删除文件夹_java File删除文件夹完整版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.Net 验证正则表达式
- 下一篇: [Python]linux自己定义Pyt