----------- android培訓、java培訓、java學習型技術博客、期待與您交流! ------------
流對象不能去操作文件夾,不能去操作屬性信息. 流只能操作數據.文件類的出現正好彌補了流的不足之處.File類是專門操作文件用的
✔用來將文件或者文件夾封裝成對象
✔方便對文件與文件夾的屬性信息進行操作
✔File對象可以作爲參數傳遞給流的構造函數
File類常見的方法:
1,創建.
在指定位置創建文件,如果該文件已經存在,則不創建,返回false和輸出流不一樣,輸出流一建立就創建文件,而且文件如果已經存在,也會覆蓋的.
創建臨時文件,一些軟件中很常見.軟件運行完後,自動刪除.
創建文件夾
Mkdir()創建一級目錄.mkdirs()創建多級目錄
2,刪除
deleteOnExit()在程序退出時刪除指定文件…….
遞歸刪除,文件文件夾…..java刪除不走回車站
import java.io.*;
class deleteDemo{
public static void main(String[] args){
File f=new File("D:\\Testdelete");
remove(f);
}
public static void remove(File f){//遞歸循環掉調用自己刪除
File[] fi=f.listFiles();
for(int i=0;i<fi.length;i++){
//一般情況建議先判斷下是否爲隱藏.,有些隱藏文件,java無法訪問
if(fi[i].isDirectory())
remove(fi[i]);
else //else一定要加上,如果不是目錄才走else.....
System.out.println(fi[i]+":刪:除:"+fi[i].delete());
}
System.out.println(f+"----"+f.delete());
}
}
3,判斷
exists()判斷文件或目錄是否存在
判斷是否爲文件或文件夾.
isHidden()判斷是否爲隱藏文件
判斷是爲絕對路徑(有詳細的盤符)
4,獲取:
getPath(),返回的是你封裝的路徑.
getAbsoluteFile()只返回絕對路徑不看封裝路徑.[開發中一般用返回爲File的,功能比較多]
getPath()與getAbsoluteFile()的區別:
返回絕對路徑中的父目錄(上一次目錄),如果獲取相對路徑(沒有具體的盤符),返回null.
List方法(一般返回File[]比較常用,因爲返回File後功能多)
過濾文件
List(FilenameFilter filter)實例:(匿名對象,複寫接口中的accept方法……………………………………..)
其中,涉及到了String的一個判斷末尾是否包含指定字符串的方法endsWith();
用listFiles()方法[遞歸],打印出包含子類的文件目錄,實例:
遞歸要注意:
1,限定條件
2,要注意遞歸的次數,儘量避免內存溢出
升級版,每層加上相應的空格數,顯得更有層次感;
listRootS()實例:
其他:
練習:
import java.io.*;
import java.util.*;
//需求:將一個制定目錄下的MP3文件的絕對路徑,存儲到一個文本文件中.
//建立一個MP3文件列表文件
class listDemo{
public static void main(String[] args)throws Exception{
File dir=new File("D:/Users/Jack/Music/KuGou");//指引出索引目錄
List<File> list=new ArrayList<File>();//加你list集合做臨時存儲
dirToList(list,dir);
System.out.println(list.size());//打印list集合中的大小
File file=new File(dir,"list.txt");//指引目標文件
listToFile(list,file);
}
public static void dirToList(List<File> list,File dir){//抽出指引目錄下的所有MP3文件
//建立臨時File數組臨時存儲,dir下的所有目錄和文件
File[] fi=dir.listFiles();
//遍歷該數組,做出抽選.只要結尾爲MP3的文件
for(File f:fi){
if(f.isDirectory())
dirToList(list,f);//判斷是目錄的話,再此調用該方法
else
if(f.getName().endsWith(".mp3"))
list.add(f);
}
}
//將list下的臨時存儲MP3文件寫入文件
public static void listToFile(List<File> list,File f)throws Exception{
BufferedWriter bufw=null;
try{
bufw=new BufferedWriter(new FileWriter(f));
//遍歷數組中的File文件,只打印絕對路徑
for(File ff:list){ bufw.write(ff.getAbsolutePath());
bufw.newLine();
bufw.flush();
}
}
catch(Exception e){
throw e;
}
finally{
try{
if(bufw!=null)
bufw.close();
}
catch(Exception ee){
throw ee;
}
}
}
}