javaI/O——File檔案操作類
一、File檔案操作類
聽起來我們的檔案操作類好像很神奇,可以通過我們的程式碼直接生成和刪除一些東西;但其實它就是一個普通類,要對這個類進行一系列的使用需要例項化物件。對File的例項化物件我們需要用到兩個構造方法:
(1)public File(String parthname);
(2)public File(String parent,Stirng child);–>設定子路徑和父路徑。
1.File類的使用
當我們想要進行檔案操作的時候可以通過File類進行:
(1)建立一個新檔案:
public boolean createNewFile() throws IOException
(2)判斷檔案是否存在:
public boolean exists();
(3)刪除檔案:
public boolean delete();
注意:
(1)File類中的所有對檔案操作的方法,都只是改變這個檔案本身,但是對檔案裡面的內容不會改變。
(2)在不同的作業系統檔案分隔符、大小寫都有區分的:
(a)檔案路徑分隔符
在windows作業系統下—>
在Linux作業系統下—>/
在Unix作業系統下—>/
(b)路徑分隔符
在windows作業系統下——>;
在Linux作業系統下——> :
在Unix作業系統下——>:
(c)檔名的大小寫
在windows下檔名部分大小寫;
在Linux、Unix作業系統下要七分大小寫。
所以,我們在例項化File類的物件的時候對於檔案分隔符采用:File.separator;對於路徑分隔符,我們採用File.pathSeparator;
2.目錄(路徑)操作
在File類中關於目錄有如下方法:
(1)取得父路徑或父File物件:
public String getParent();–》取父路徑
public File getParentFile();–》取父File物件
上面兩個方法都可以取得父路徑,但是若想建立父路徑,此時最好取得父路徑的File類物件。如果只是單純的檢視父路徑的時候我們才使用getParent()方法。
(2)建立目錄(無論多少級目錄都會建立)
eg:
// 3.檔案目錄的操作 //separator由不同作業系統下的JVM決定到底使用哪種分隔符 File file=new File("E:"+File.separator+"learn"+File.separator+"javaio"+File.separator+"a1"); //上面寫的這個父路徑在我的電腦裡面是存在的所以,對於下面的這個條件的判斷結果是false if(!file.getParentFile().exists()){//判斷父File物件是否存在 file.getParentFile().mkdirs();//-》物件(父File的物件)呼叫它的方法不管由多少級父目錄都建立父目錄 } if(file.exists()){ //當前檔案是否存在的判斷->我們是定的這個檔案a1在這個路徑下面是不存的,所以經過下面程式碼的執行會建立這個檔案 file.delete(); }else{ file.createNewFile(); }
**建立檔案的另外一種方法:
Path path=Path,get("E","learn","io","a1");
File file=path.toFile();//講這個獲得的路徑轉化為檔案,可以直接獲得檔案不用進行判斷是否為檔案。
3.檔案資訊
在File類裡面還提供了許多關於取得檔案資訊的方法:
(1)判斷路徑是否是檔案:
public boolean isFile();
(2)判斷路徑是否是目錄:
public boolean isDirectory();
(3)取得檔案大小(位元組):
public long length();
(4)最後一次修改日期:
public long lastModifiled();
eg:
// 4.檔案資訊
//// (1)取得檔案資訊操作
// //這是我們需要進行操作的檔案
// File file = new File("E:"+File.separator+"learn"+File.separator+"javaio"+File.separator+"a1");
// //首先對於以上的路徑我們並不知道是否為檔案,所以需要我們判斷這個枯井是否為檔案
// if(file.exists()&&file.isFile()){
// System.out.println("檔案大小"+file.length());
// System.out.println("最後一次修改日期:"+new Date(file.lastModified()));
// }
// (2)列出目錄中的全部組成
//下面是需要操作的檔案
File file=new File("E:"+File.separator+"learn"+File.separator+"javaio");
//保證這個目錄是存在的
if(file.exists()&&file.isDirectory()){
//列出目錄中的所有內容
//listFile()這個方法:file是普通檔案返回null;file是目錄返回目錄下的所有內容(檔案以及資料夾)
File[] result=file.listFiles();
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
}
}
}
}
注意:區分普通檔案和目錄
4、綜合案例(目錄列表)
雖然我們的File類提供了listFile()方法,但是這個方法本身只能列出本目錄中的第一級資訊(就是如果在一個目錄的下面出現了檔案,在這個目錄中還有目錄。這個時候就以檔案為標準列出所有內容,但是在這個與檔案同級的目錄裡面的內容就不能列出它的資訊了)。
這個時候我們採用遞迴的方法:
//遞迴列印當前目錄下的所有層次的檔案資訊
File file = new File("E:"+File.separator+"learn"+File.separator+"javaio");
listAllFiles(file);//從此處開始遞迴
}
public static void listAllFiles(File file){
//將給定目錄的檔案列出其一級資訊,然後再對這些一級資訊進行判斷,將不是普通檔案的再次進行listFile(),直到這個檔案為普通檔案
if(file.isDirectory()){
File[] result=file.listFiles();//繼續列出子目錄內容
if(result!=null){
for(File file2:result){
listAllFiles(file2);
}
}
}else{
//給的這個file就是檔案,直接列印
System.out.println(file);
}
}
}