java File類型

在Java中提供了操做文件及目錄(即咱們所說的文件夾)類File。有如下幾點注意事項 java

(1)不管是文件仍是目錄都使用File類操做; 編程

   (2)File類只提供操做文件及目錄的方法,並不能訪問文件的內容,因此他描述的是文件自己的屬性; 數組

   (3)若是要訪問文件自己,用到了咱們之後要學習的IO流. ide

   下面讓咱們開始File的學習吧。
學習

   一:構造方法
測試

   File 文件名/目錄名 = new File("文字路徑字符串");
spa

   在Java中提供了幾種建立文件及目錄的構造方法,但大致上都是用參數中的文字路徑字符串來建立,路徑能夠是相對路徑或絕對路徑,區別在於:
orm

   (1)絕對路徑名包含了他所在文件的所有信息 對象

   (2)相對路徑必須依據其餘路徑名的信息進行解釋
blog

   二:通常方法

   (1)文件檢測相關方法

   a:boolean isDirectory():判斷File對象是否是目錄

   b:boolean isFile():判斷File對象是否是文件

   c:boolean exists():判斷File對象對應的文件或目錄是否是存在

   d:boolean canWrite():判斷FIle對象對應的文件或目錄是否可寫

e:boolean canRead():判斷FIle對象對應的文件或目錄是否可讀

   (2)文件操做的相關方法

   a:boolean createNewFile():路徑名指定的文件不存在時,建立一個新的空文件

   b:boolean delete():刪除File對象對應的文件或目錄

   (3)目錄操做的相關方法

   a:boolean mkdir():單層建立空文件夾

   b:boolean mkdirs():多層建立文件夾

   c:String[] list():支隊File爲文件夾時有效,返回這個目錄下的全部文件及子目錄

   d:File[] listFiles():返回File對象表示的路徑下的全部文件對象數組

   (4)訪問文件相關方法

   a:String getName():得到文件或目錄的名字

   b:String getPath() :得到文件或目錄的相對路徑

   c:String getAbsolutePath():得到文件目錄的絕對路徑

   d:String getParent():得到對象對應的目錄的父級目錄

   e:long lastModified():得到文件或目錄的最後修改時間

f:long length() :得到文件內容的長度

   g:boolean renameTo("新名字"):重命名此對象的名字,成功返回true,不然返回false

   三:文件操做

   1:目錄的建立

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public  class  MyFile {
    public  static  void  main(String[] args) {
        //建立一個目錄
        File file1 =  new  File("d:\\test");
        //判斷對象是否是目錄
        System.out.println("是目錄嗎?"+file1.isDirectory());
        //判斷對象是否是文件
        System.out.println("是文件嗎?"+file1.isFile());
        //得到目錄名
        System.out.println("名稱:"+file1.getName());
        //得到相對路徑
        System.out.println("相對路徑:"+file1.getPath());
        //得到絕對路徑
        System.out.println("絕對路徑:"+file1.getAbsolutePath());
        //最後修改時間
        System.out.println("修改時間:"+file1.lastModified());
        //文件大小
        System.out.println("文件大小:"+file1.length());
    }
}

程序首次運行結果

1
2
3
4
5
6
7
是目錄嗎?false
是文件嗎?false
名稱:test
相對路徑:d:\test
絕對路徑:d:\test
修改時間:0
文件大小:0

細心的你能夠看到,file1對象是目錄啊,怎麼在判斷「是否是目錄」時輸出了false呢?這是由於只是建立了表明他是目錄的對象,尚未真正的建立,這時候要用到mkdir()/mkdirs()方法,以下:

1
2
3
4
5
6
7
8
9
public  class  MyFile {
    public  static  void  main(String[] args) {
        //建立一個目錄
        File file1 =  new  File("d:\\test\\test");
        file1.mkdirs();//建立了多級目錄
        //判斷對象是否是目錄
        System.out.println("是目錄嗎?"+file1.isDirectory());     
    }
}

程序首次運行結果:

1
是目錄嗎?true

2:文件的建立

1
2
3
4
5
6
7
8
9
public  class  MyFile {
    public  static  void  main(String[] args) {
        //建立一個文件
        File file1 =  new  File("d:\\a.txt");
                                                                                                                                                                                                                                                                
        //判斷對象是否是文件
        System.out.println("是文件嗎?"+file1.isFile());  
    }
}

   首次運行結果:

1
是文件嗎?false

一樣會發現相似於上面的問題,這是由於他只是表明了一個文件對象,並無真正的建立,要用到createNewFile()方法,以下

1
2
3
4
5
6
7
8
9
10
11
12
13
public  class  MyFile {
    public  static  void  main(String[] args) {
        //建立一個文件對象
        File file1 =  new  File("d:\\a.txt");
        try  {
            file1.createNewFile();//建立真正的文件
        }  catch  (IOException e) {
            e.printStackTrace();
        }
        //判斷對象是否是文件
        System.out.println("是文件嗎?"+file1.isFile());  
    }
}

結果

1
是文件嗎?true

3:文件夾與文件的建立目錄

   文件時存放在文件夾下的,因此應該先建立文件夾,後建立文件,以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public  class  MyFile {
    public  static  void  main(String[] args) {
        //表明一個文件夾對象,單層的建立
        File f3 =  new  File("d:/test");
        File f4 =  new  File("d:/test/a.txt");
        f3.mkdir();//先建立文件夾,才能在文件夾下建立文件
        try  {
            f4.createNewFile();
        }  catch  (IOException e) {
            e.printStackTrace();
        }
                                                                                                                                                                   
        //表明一個文件夾對象,多層的建立
        File f5=  new  File("d:/test/test/test");
        File f6 =  new  File("d:/test/test/test/a.txt");
        f5.mkdirs();//多層建立
        try  {
            f6.createNewFile();
        }  catch  (IOException e) {
            e.printStackTrace();
        }
    }
}

運行結果爲,在D磁盤的test文件夾下有一個a.txt,在D磁盤的test/test/test下有一個a.txt文件。

   4:編程:判斷是否是有這個文件,如有則刪除,沒有則建立

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public  class  TestFileCreatAndDele {
    public  static  void  main(String[] args) {
        File f1 =  new  File("d:/a.txt");
        if(f1.exists()){//文件在嗎
            f1.delete();//在就刪除
        }else{//不在
            try  {
                f1.createNewFile();//就從新建立
            }  catch  (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

5:文件的篩選

 在File中的list()方法中能夠接受一個FileNameFilter的參數,FileNameFilter是個過濾器也是一個接口,能夠經過匿名內部類的形式實現他的accept()方法,從而達到篩選的目的 ,以下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//篩選出文件名爲.java後綴的文件
public  class  TestFileFilter {
    public  static  void  main(String[] args) {
        File file =  new  File("d:/test");//建立目錄
        File[] f = file.listFiles(new  FileFilter(){//列出目錄下的符合條件的文件
            @Override
            public  boolean  accept(File ff) {//重寫accept方法
                if(ff.getName().endsWith(".java")){//name以.java結尾的爲符合條件,將被篩出
                    return  true;
                                                            
                }else{
                    return  false;
                }
            }
                                                    
        });
        for(File g:f){//輸出篩出的文件
            System.out.println(g.getName());
        }
    }
}

測試以前,在d:/test目錄下導入一些文件,以便測試哦。。。結果爲篩出了全部.java文件

   6:文件的逐層讀取

   File的listFiles()只能列出當前文件夾下的文件及目錄,那麼其子目錄下的文件及目錄該如何獲取呢?解決的辦法有不少,在這運用遞歸解決。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//逐層獲取文件及目錄
public  class  TestFindFile {
    public  static  void  openAll(File f) {// 遞歸的實現
        File[] arr = f.listFiles();// 先列出當前文件夾下的文件及目錄
        for  (File ff : arr) {
            if  (ff.isDirectory()) {// 列出的東西是目錄嗎
                System.out.println(ff.getName());
                openAll(ff);// 是就繼續得到子文件夾,執行操做
            }  else  {
                // 不是就把文件名輸出
                System.out.println(ff.getName());
            }
        }
    }
    public  static  void  main(String[] args) {
        File file =  new  File("d:/test");// 建立目錄對象
        openAll(file);// 打開目錄下的全部文件及文件夾
    }
}

原文地址: http://cinderella7.blog.51cto.com/7607653/1259097
相關文章
相關標籤/搜索