1. 程式人生 > >JAVA:IO流——File類

JAVA:IO流——File類

1、掌握File 類的作用

2、可以使用File 類中的方法對檔案進行操作

所有的 io 操作都儲存在 java.io 包中。

構造方法:public File (String pathname) 

直接根據路徑找到檔案。

 

1. 建立一個新檔案

建立檔案: public boolean createNewFile() throws IOException

假設:現在要在d 盤上建立一個doc.txt 檔案。

  1.  import java.io.*;
  2. import java.io.IOException;
  3. public class FileDemo{
  4.   File file=new File("d:"+File.separator+"doc.txt");  //     ("d:\\doc.txt")分隔符的使用,兩個反斜槓
  5. try{
  6.   file.createNewFile();
  7. }catch(IOException e){
  8.   e.printStackTrace();
  9. }
  10. } 

在各個作業系統中,實際上路徑的分隔符是不一樣的,例如:

windows 中使用反斜槓:“\”

linux 中使用正斜槓:“/”

如果想讓 JAVA 程式的可移植性繼續保持,則最好根據所在的作業系統來自動使用分隔符File.separator

 File.pathSeparator與File.separator的區別?

前者為分號 ; 後者為冒號 :

  1. import java.io.File ;  
  2. import java.io.IOException ;  
  3. publicclass FileDemo02{  
  4.     publicstaticvoid main(String args[]){  
  5.         System.out.println("pathSeparator:" + File.pathSeparator) ; // 呼叫靜態常量
  6.         System.out.println("separator:" + File.separator) ; // 呼叫靜態常量
  7.     }  
  8. };  

如果想讓 JAVA 程式繼續保持可移植性,那麼在編寫路徑的時候就應該使用 File 類中的常量。

 注意:在操作檔案的時候一定要注意分隔符,使用 File.separator

 表示。

2. 刪除一個指定的檔案

public boolean delete()    將之前建立的檔案,刪除掉。先判斷檔案是否存在 

在File 類中可以使用 exists() 方法判斷一個檔案是否存在:public boolean exists() 

import java.io.File;
import java.io.IOException;
public calss FileDemo{
public static void main(String args[]){
File file=new File("d:"+File.separaor+"doc.txt");  //找到檔案路徑
if(file.exists()){  //如果檔案存在
file.delete();
}
}
}

3.綜合建立、刪除檔案的操作

現在以下一個要求:給定一個路徑,如果此檔案存在,則刪除;如果檔案不存在則建立一個新的檔案。

  1. import java.io.File ;  
  2. import java.io.IOException ;  
  3. publicclass FileDemo06{  
  4.     publicstaticvoid main(String args[]){  
  5.         File f = new File("d:"+File.separator+"test.txt") ;     // 例項化File類的物件
  6.         if(f.exists()){ // 如果檔案存在則刪除
  7.             f.delete() ;    // 刪除檔案
  8.         }else{  
  9.             try{  
  10.                 f.createNewFile() ;     // 建立檔案,根據給定的路徑建立
  11.             }catch(IOException e){  
  12.                 e.printStackTrace() ;   // 輸出異常資訊
  13.             }  
  14.         }  
  15.     }  
  16. };  

從程式的執行結果中可以發現,所有的操作並不會立刻執行,因為JAVA 是通過JVM 與底層進行互動的,所以所有的操作需要經過JVM完成,那麼就可能產生延遲。

提示:對於檔案的字尾,是可有可無的。

4.建立一個資料夾

使用mkdir() 方法建立一個資料夾   public boolean mkdir()

  1. import java.io.File ;  
  2. import java.io.IOException ;  
  3. publicclass FileDemo07{  
  4.     publicstaticvoid main(String args[]){  
  5.         File f = new File("d:"+File.separator+"mldn") ;     // 例項化File類的物件
  6.         f.mkdir() ; // 建立資料夾
  7.     }  
  8. };  

5.列出指定目錄的全部檔案

如果現在給出了一個目錄,則可以直接列出目錄中的內容,但是列出的方法在File 類中存在兩個:

以字串陣列的形式返回:public String[] list()   返回路徑下所有檔案的名

以 File 陣列的形式返回: public File[] listFiles() 返回所以檔案的路徑

操作一: 使用list() 列出全部內容
  1. import java.io.File ;  
  2. import java.io.IOException ;  
  3. publicclass FileDemo08{  
  4.     publicstaticvoid main(String args[]){  
  5.         File f = new File("d:"+File.separator) ;        // 例項化File類的物件
  6.         String str[] = f.list() ;   // 列出給定目錄中的內容
  7.         for(int i=0;i<str.length;i++){  
  8.             System.out.println(str[i]) ;  
  9.         }  
  10.     }  
  11. };  
操作二: 使用listFiles() 列出全部內容(帶路徑)
  1. import java.io.File ;  
  2. import java.io.IOException ;  
  3. publicclass FileDemo09{  
  4.     publicstaticvoid main(String args[]){  
  5.         File f = new File("d:"+File.separator) ;        // 例項化File類的物件
  6.         File files[] = f.listFiles() ;  // 列出全部內容
  7.         for(int i=0;i<files.length;i++){  
  8.             System.out.println(files[i]) ;  
  9.         }  
  10.     }  
  11. };  
後者列出的是一個完整的路徑,這樣對於程式本身來說是很容易操作的。

6.判斷一個給定的路徑是否是目錄(即,是否是資料夾)

在File 類中直接使用: public boolean isDirectory()
取得檔案的路徑:   public boolean getPath()

給定路徑,判斷是否是目錄

  1. import java.io.File ;  
  2. import java.io.IOException ;  
  3. publicclass FileDemo10{  
  4.     publicstaticvoid main(String args[]){  
  5.         File f = new File("d:"+File.separator) ;        // 例項化File類的物件
  6.         if(f.isDirectory()){    // 判斷是否是目錄
  7.             System.out.println(f.getPath() + "路徑是目錄。") ;  
  8.         }else{  
  9.             System.out.println(f.getPath() + "路徑不是目錄。") ;  
  10.         }  
  11.     }  
  12. };  

7、要求:列出指定目錄的全部內容 

如果給定了一個目錄,則要求將此目錄中的全部檔案都列出來,但是列的時候還會存在子資料夾。

應該採用遞迴的呼叫形式。 

  1. import java.io.File ;  
  2. import java.io.IOException ;  
  3. publicclass FileDemo11{  
  4.     publicstaticvoid main(String args[]){  
  5.         File my = new File("d:" + File.separator) ; // 操作路徑
  6.         print(my) ;  
  7.     }  
  8.     publicstaticvoid print(File file){    // 遞迴呼叫
  9.         if(file!=null){ // 判斷物件是否為空
  10.             if(file.isDirectory()){ // 如果是目錄
  11.                 File f[] = file.listFiles() ;   // 列出全部的檔案
  12.                 if(f!=null){    // 判斷此目錄能否列出
  13.                     for(int i=0;i<f.length;i++){  
  14.                         print(f[i]) ;   // 因為給的路徑有可能是目錄,所以,繼續判斷
  15.                     }  
  16.                 }  
  17.             }else{  
  18.                 System.out.println(file) ;  // 輸出路徑
  19.             }  
  20.         }  
  21.     }  
  22. };