天天看點

黑馬程式員--File類對象

 ------- <a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">android教育訓練</a>、<a href="http://www.itheima.com" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="blank">java教育訓練</a>、期待與您交流! ----------

File類用來将檔案或檔案夾封裝成對象,實作對檔案與檔案夾進行操作。進一步彌補流對象對檔案操作與對檔案夾操作的局限,具體展現在File類,實作了對包括檔案和檔案夾包括建立、删除、判斷、擷取資訊等的操作,。而流不具備對檔案屬性操作的方法,且無法對檔案夾進行操作。

    File對象,是檔案和目錄的抽象表現形式,例如: File f=new File("c:\\abc\\a.txt");

    File類對象的常用屬性和方法:

    1.常用屬性  static String separator----與系統有關的預設分隔符(實作分隔符的跨平台,在不同平台下表現為不同的分隔符,比如在WIndows作業系統下的分隔符是"\",而Unix的是"/" ),那麼在Windows下File.separator就表示為“\”,而在Unix作業系統下表現為“/”。當一個軟體涉及到與系統平台相關的分隔符,或者說一款軟體包含系統相關分隔符,同時有跨平台需求,就可以使用static String separator。

例如下面的代碼:

class FileDemo

{

   public static void main(String [] args)

    {

       consMethod();

    }

    public static void consMethod()

    {

        File f1=new File("c:\\abc\\zzz\\a.txt");

        File f2=new File("c:"+Flie.separator+"abc"+Flie.separator+"zzz"+Flie.separator+"a.txt");

       //f2對象除了盤符c:的因素外,便可在多個平台間運作。

        System.out.println("f1:"+f1);

        System.out.println("f2:"+f2);

    }

}

    2.常用方法  方法主要包括對檔案和檔案夾的建立、删除、判斷、擷取資訊四個主要方面。

        1)建立

            boolean  createNewFile():在指定位置上建立檔案,如果指定路徑上無同名檔案則建立此檔案,并傳回ture。如果該檔案已經存在,則不建立,傳回false。和輸出流不一樣,輸出流對象一旦建立建立檔案,如果指定目錄下有同名檔案存在,也會被覆寫(相當于删除原來指定目錄下的同名檔案,再建立一個同名檔案,來接收輸出流資料,原同名被删除的檔案資料不保留!)。

           例如:    

            File f=new File("c:\\abc\\a.txt");               

            f.createNewFile();  //通過File類的createNewFile方法建立一個檔案。a.txt即為c盤下的abc目錄下的文本檔案“a.txt”   此方法抛出throwsIOException異常

            boolean mkdir():建立檔案夾(隻能建立一級,不能建立多級檔案夾)。

            void mkdirs:建立多級檔案夾。

            例如:

                   File f=new File("c:\\abc\\dldf\\dgfe\afg");   

                   f.mkdir();//建立不成功,但能編譯和運作通過。

                   f.mkdirs();//可以建立多級目錄,彌補mkdir()的局限性。

        2)删除

            boolean delete():删除失敗傳回false.

            void deleteOnExit();在程式退出時删除指定檔案。該方法是對delete()的進一步優化,試想兩種情況:1、當一個檔案同時被目前程式和别的程式占用時,當本程式執行delete()時,會因其他程式對該檔案的占用而使delete()執行失敗,而該檔案本是該用完就可以被删除的垃圾程式,因為本次執行失敗而使垃圾檔案占據記憶體空間未被删除……;2、程式在過程中發生異常而終止,而後續的程式代碼包含delete()語句需執行對垃圾檔案的删除指令,因異常同樣被終止,沒有執行到。這兩種情況都制約了delete的執行。而deleteOnEixt()的意思是,在當虛拟機退出前,執行該語句。删除指定垃圾、或臨時檔案。

        3)判斷

            boolean exists()://判斷檔案是否存在。

            isFile();//判斷表示的檔案是否是一個标準檔案。

            isDirectory();//判斷表示的檔案是否是一個目錄。

            需注意:一下代碼傳回的都為false

            public static void method_1()throws IOException

            {

                File f=new File("file.txt");

                //f.createNewFile();//去掉本行前面的第一個注釋,f.isFile傳回ture.

               //f.mkdir;                  //去掉本行前面的第一個注釋,f.isDirectory傳回ture.

                f.isDirectory();           //傳回false

                f.isFile();                    //傳回false

            }

            isHidden();//判斷指定的檔案是否是一個隐藏檔案。

            isAbsolute();//判斷是否為絕對路徑名。

        4)擷取資訊

           getName();//擷取路徑名表示的檔案或目錄的名稱。

           getPath();//如果擷取到的是相對路徑,則傳回的是相對路徑,如果擷取到的是絕對路徑則傳回的是絕對路徑。

           getParent();//該方法傳回的是絕對路徑中的父目錄。如果擷取的是相對路徑,則傳回的是最底層檔案或檔案夾的上一層目錄,如果擷取的隻是本層單級檔案或檔案夾,傳回null。

           getAbsolutePath();//該方法擷取絕對路徑,不管檔案或檔案夾是否被建立,該方法隻從File類封裝的對象中擷取路徑,不需要像isFile()和isDirectory()一樣,要先判斷是否存在檔案或檔案夾被成功建立(exists())

           long lastModified();擷取檔案最後一次被修改的時間。

           long length();擷取檔案的大小

           String []   list(FilenameFilter filter);//傳回抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中滿足指定過濾器的檔案和目錄。-----------簡單點講就是檔案和目錄按filter條件進行過濾的篩選器

           例如:

import java.io.*;

class fileDemo

{

     public static void main(String[] args)throws IOException

     {

            dirmk();

     }

     public static void dirmk()throws IOException

     {

          File f=new File("abc\\adfa\\dfa");

          f.mkdirs();

          File f1=new File(f,"a.txt");

          f1.createNewFile();

          File f2=new File(f,"b.txt");

          f2.createNewFile();

          File f3=new File(f,"c.txt");

          f3.createNewFile();

          File f4=new File(f,"d.txt");

          f4.createNewFile();

          File f5=new File(f,"e.txt");

          f5.createNewFile();

          File f6=new File(f,"f.txt");

          f6.createNewFile();

          File f7=new File(f,"g.txt");

          f7.createNewFile();

          File f8=new File(f,"g.java");

          f8.createNewFile();

          File f9=new File(f,"r.java");

          f9.createNewFile();

          File f10=new File(f,"t.java");

          f10.createNewFile();

          File f11=new File(f,"h.java");

          f11.createNewFile();

          File f12=new File(f,"j.java");

          f12.createNewFile();

          File f13=new File(f,"dd.java");

          f13.createNewFile();

         String [] arr=f.list(new FilenameFilter ()

         {

              public boolean accept(File dir,String name)

              {

                  return name.endsWith(".txt");//startsWith("e");

              }

         });

         for(String fd:arr)

         {

              System.out.println(fd);

         }

        System.out.println(f.getAbsolutePath());

     }

}