File(文件)類
File類用於封裝一個路徑,該路徑可以是從系統盤符開始的絕對路徑,也可以是相對於當前目錄而言的相對路徑
File類內部封裝的路徑可以指向一個文件,也可以指向一個目錄,在使用File類操作文件或者目錄之前,首先得創建一個File對象。
創建File對象
1.File f=new File("c:\\abc\a.txt");//將a.txt封裝成FIle對象,可以將已有的和未出現的文件或者文件夾封裝成對象。2.File f=new File("c:\\abc","a.txt"); 第一個參數代表的是目錄,第二個參數代表的是目錄下的文件。
3.file d=new File("c\\abc"); 將路徑封裝成對象File f=new File(d,"a.txt"); 調用路徑對象
f代表的是文件路徑,目錄分隔符:
構造方法
File(String pathname) 創建一個指定文件或目錄路徑的File對象
File(File file, String fileName) 創建一個由File對象和指定文件名表示的File對象File(String filePath, String fileName) 創建一個指定文件目錄路徑和文件名的File對象
File類的常用方法
1.創建
boolean createNewFile(): 在指定位置創建文件,如果該文件已經存在,則不創建,返回false和寫入流不一樣,寫入流創建文件會覆蓋已經存在的文件。
File f=new File("a.txt");
f.createNewFile();
創建一級目錄File dir=new File("abc");
dir.mkdir();
創建多級目錄dir.mkdirs();
2.刪除
boolean f.delete(); 刪除失敗,返回false,可能不能刪除
void deleteOnExit(); 在程序退出時,刪除指定文件。必須刪除。不會失敗
3.判斷 :在判斷文件對象是都是文件或者目錄的時候,必須要先判斷該文件對象封裝的內容是否存在。boolean canRead() 判斷文件是否可讀,可讀則返回真,否則返回假
boolean canWrite() 判斷文件是否可寫,可寫則返回真,否則返回假boolean exists() 判斷文件是否是指定路徑中的文件或目錄,是則返回真,否則返回假
boolean isFile() 判斷File的對象是否是文件,是則返回真,否則返回假
boolean isDirectory() 判斷File的對象是否是目錄,是則返回真,否則返回假
boolean isAbsolutePath() 判斷File的對象是否是一個文件或目錄的絕對路徑,是則返回真,否則返回假File f=new File("a.txt");
f.canExecute(); 是否能執行。
f.exits();返回boolean 文件是否存在是否是目錄
f.isDirectory();
是否是文件f.isFile();
是否是隱藏的f.isHidden();
是否是絕對路徑
f.isAbsolute();4.獲取信息。
getName() //獲取名稱getpath() //獲取路徑
getAbsolutePath() //獲取絕對路徑getParent() //獲取絕對路徑下的父路徑,如果獲取的是相對路徑返回null,如果相對路徑中由上一級目錄,該目錄就是結果。
lastModified()//獲取最后一次修改時間length();//獲取體積大小
public String getParent() 獲取文件父目錄名字。如果沒有指明父目錄返回null
public int hashCode() 返回路徑名的哈希碼
public long lastModified() 獲取文件最近一次修改時間(單位毫秒)5.其他
renameTo();改名,重命名,如果修改路徑的話,同時路徑也會修改
f1.renameTo(f2);listRoots();返回 File 數組,列出可用的文件系統根(盤符)
例子:File[] files=File.listRoots();
for(File f: files) {
sop(f)}
list():返回當前目錄下所有文件,包括子目錄
File f=new File("abc");
String[] namess=f.list();//調用list方法的file對象必須封裝了一個目錄,把那個目錄必須存在for(String f: names) {
sop(f)}
//顯示.bmp結尾的文件
list(FilenameFilter Filter) 返回String[] 指定目錄中滿足制定過濾器的文件和目錄
File dir=new File("abc");
String[] namess=f.list(new FilenameFileter()
public boolean accept(File dir,String name) {
return name.endsWith(".bmp");}
);for(String f: names) {
sop(f);}
//listFiles();返回當前路徑下的文件對象。(不包括子目錄)
FIle dir=new File("c:\\");
File[] files=dir.listFiles();for(File f : files) {
sop (f.getname())
}遍歷目錄下的文件
如果希望獲取指定類型的文件,可以使用重載的list(FilenameFilter)方法。
list(FilenameFilter filter)方法的工作原理:1、調用list()方法傳入FilenameFilter文件過濾器對象
2、取出當前File對象所代表目錄下的所有子目錄和文件
3、對於每一個子目錄或文件,都會調用文件過濾器對象的accept(File dir,String name)方法,並把代表當前目錄的File對象以及這個子目錄或文件的名字作為參數dir和name傳遞給方法
4、如果accept()方法返回true,就將當前遍歷的這個子目錄或文件添加到數組中,如果返回false,則不添加。
列出指定目錄下所有內容:使用遞歸 。。函數自己調用自己
File dir=new File("d:\\");
sop(dir);
File[] files=dir.listFiles();
for(int x=0;x<files.length;x++) {
if(files[x].isDirectory)
showDir(files[x]);
elseSystem.out.println(files[x]);
}
將一個指定目錄下的jva文件的絕對路徑,存儲到一個文本文件中。
思路:
1.對指定目錄進行遞歸2.獲取遞歸過程中所有以JAVA文件的路徑
3.將這些目錄存儲到集合中,將集合中的數據寫入到一個文件中。
刪除文件及目錄
File類提供了delete()方法刪除文件,但該方法無法刪除目錄,因此,要想刪除文件及目錄,需要通過遞歸的方式將整個目錄以及其中的文件全部刪除。
刪除一個帶內容的目錄
原理:從里面往外刪除,就需要遞歸
File dir=new File("d:\\");
File[] files=dr.listFiles();for(int x=0;x<files.length;x++) {
if(files[x].isDirectory())
removeDir(files[x]);
sop(files[x].toString()+":-file-:"+files[x].delete(););}
sop(dir+":-dir-:"+dir.delete();)
RandomAccessFile
RandomAccesseFile不屬於流類,但具有讀寫文件數據的功能,可以隨機地從文件的任何位置開始執行讀寫數據的操作RandomAccessFile可以將文件以只讀或者讀寫的方式打開,具體使用哪種方式取決於創建它所采用的構造方法
RandonAccessFile(String file,string mode)參數file指定被訪問的文件
RandonAccessFile(String name,string mode)參數name指定被訪問文件的路徑
mode的具體值
r 以只讀方式打開。調用該對象的任何write方法都會導致拋出IOException異常
rw 打開以便讀取和寫入,若該文件不存在則嘗試創建
rws 打開以便讀取和寫入,與rw不同的是還要求對文件的內容的每個更新都同步寫入到基礎存儲設備中去
rwd 打開以便讀取和寫入,與rw不同的是還要求對文件內容的每個更新都同步寫入到基礎存儲設備中去
RandomAccessFile類針對文件的隨機訪問操作,提供了一些用於定位文件位置的方法
long getFilePointer() 返回當前讀寫指針所處的位置
void seek(long pos) 設定讀寫指針的位置,與文件開頭相隔pos個字節數
int skipBytes(int n) 使讀寫指針從當前文職開始,跳過n個字節
void setLength(long newLength) 設置此文件的長度