1. 程式人生 > >javaI/O——File檔案操作類

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);
        }
    }
}