File類方法總結及使用Lambda表達式實現文件過濾

目錄

準備工作:在F:\blackhorse\mavenproject下創建FileIOUpload項目

1、1 字段摘要

 1、2構造方法

1、3 靜態成員方法

1、4 常用方法

1、5文件遍歷小Demo

1、6使用Lambda表達式實現文件過濾

1、7總結:


準備工作:在F:\blackhorse\mavenproject下創建FileIOUpload項目

java.io.File 類是文件和目錄路徑名的抽象表示,主要用於文件和目錄的創建、查找和刪除等操作。

1、1 字段摘要

static String pathSeparator
          與系統有關的路徑分隔符,爲了方便,它被表示爲一個字符串。
static String separator
          與系統有關的默認名稱分隔符,爲了方便,它被表示爲一個字符串。

路徑分隔符(分號)===> ;

名稱分隔符(反斜槓)===>\

這裏給出的路徑分隔符和名稱分隔符都是Window系統的,其實路徑分隔符也好,名稱分隔符也好,他們會隨系統的不同而不同,比如Linux的名稱分隔符就是雙斜槓,而合理的使用上面兩個字段,能有效的避免項目在不同平臺出現不必要的錯誤

 1、2構造方法

public File(String pathname):通過將給定的路徑名字符串轉換爲抽象路徑來創建新的File實例

public File(String parent,String child):從父路徑名字符串和子路徑字符串創建新的File實例

public File(File parent,String child):從父抽象路徑名對象和子路徑茗茶資符串創建新的File實例

public File(URI uri) 通過給你定的file:URI轉換爲一個抽象路徑名來創建一個新的File實例

Tips:

 File file = new File("");//1
 String absolutePath = file.getAbsolutePath();
 File file1 = new File(absolutePath);//2
 System.out.println(file);
 System.out.println(file1);
 
對於上面一段代碼,兩個輸出語句輸出的結果都是一樣的,但表示的含義不同,1處讀的是個空文件,所以file輸出的是一個空文件的路徑,其真實輸出應該是“F:\blackhorse\mavenproject\null”(實際輸出是F:\blackhorse\mavenproject);而file.getAbsolutePath獲取的是“當前項目所在根目錄下的一個空文件”的路徑,而“當前項目所在根目錄下的一個空文件”的路徑(實際輸出)其字符串又可以被解讀爲“當前項目”的根路徑。所以當這個參數absolutePath被傳進File的構造方法中後,2處讀到的實際上是當前項目的父工程的路徑,兩者輸出的結果雖然一樣,但表示含義不同。此處在剛入門java時有被絆倒,用1的方法直接遍歷文件夾,發現遍歷爲空。在進行文件遍歷時1處因爲讀到的是個空文件,所以不能遍歷,而2處就可以遍歷 。也可以用File類提供的exits()方法進行判斷,會發現1處是false而2處是true。

1、3 靜態成員方法

 

靜態方法:

static String pathSeparator 與系統有關的路徑分隔符

static String separator 與系統有關的默認名稱分隔符

 

static File

createTempFile(String prefix, String suffix)
          在默認臨時文件目錄中創建一個空文件,使用給定前綴和後綴生成其名稱。

static File createTempFile(String prefix, String suffix, File directory)
           在指定目錄中創建一個新的空文件,使用給定的前綴和後綴字符串生成其名稱。

 

這裏需要注意,前綴prefix的長度被規定不能小於3.,否則會報"Prefix string too short" 異常

1、4 常用方法

public String getAbsolutePath():返回此File的絕對路徑字符串

public String getPath():將此File轉換爲路徑名稱字符串。

public String getName():返回由此File表示的文件或目錄的名稱

public long length():返回由此File表示的文件的字節長度

常用來做判斷的方法

public boolean exists() :判斷文件或目錄是否存在

public boolean isDirectory():判斷是否爲目錄,不是或不存在爲false

public boolean isFile():判斷是否爲文件,是爲true,不是或不存在爲false

創建、刪除功能的方法

public boolean createNewFile():創建File文件,成功返回true,失敗返回false

public boolean delete():刪除此File所代表的文件可以刪除任意文件,但只能刪除空的文件夾,且刪除不走回收站

public boolean mkdir():創建單級文件夾

public boolean mkdirs():創建單級和多級文件夾

目錄的遍歷:

public String[] list():返回一個String數組,表示該File目錄中的所有子文件或目錄

public File[] listFiles():返回一個Fille數組,表示該File目錄中的所有子文件或目錄

1、5文件遍歷小Demo

遍歷當前項目所在更目錄下的所有文件夾及文件

package com.heronsbill.test;

import java.io.File;

/**
 * @JDK: 1.8 
 * @Author: heronsbill
 * @DATA: 2019/8/26
 */
public class Test3 {
    public static void main(String[] args) {
        File file1 = new File("");
        File file2 = new File(file1.getAbsolutePath());

        queryFiles(file2);
    }
    public static void queryFiles(File file) {
        if (file.isDirectory()) {
            System.out.println("文件夾:" + file.getAbsolutePath());
            File[] files = file.listFiles();
            for (File file1 : files) {

                queryFiles(file1);
            }
        } else {
            System.out.println("文件名" + file.getAbsolutePath());
        }
    }
}

 

1、6使用Lambda表達式實現文件過濾

1、這裏使用FileFilter這一函數型接口,對File的listFile()方法進行過濾

2、Lambda表達式是JDK1.8開始的新特性,其作用之一就是針對函數式接口進行簡化,其由一些參數,一個箭頭,一段代碼組成,格式爲(參數列表)->{代碼語句}

格式說明:

    小括號內的語法與傳統方法參數列表一致,無參則留空,多個參數則用逗號隔開

    ->是新引入的語法格式,代表指向動作

    大括號內的語法與傳統方法體要求基本一致

Lambda省略規則:

  1. 小括號內參數的類型可以省略
  2. 如果小括號內僅有一個參數,則小括號也可以省略
  3. 如果大括號內有且僅有一個語句,則無論是否有返回值,都可以省略:大括號,return關鍵字和語句的分號(這仨要麼不省,要麼都省!)

代碼如下: 

package com.heronsbill.test;

import java.io.File;

/**
 * JDK:1.8
 * @Author: heronsbill
 * @DATA: 2019/8/26
 */
public class Test4 {
    public static void main(String[] args) {
        File file1 = new File("D:\\aaa");
        File file2 = new File(file1.getAbsolutePath());
        queryFiles(file2);

    }
    public static void queryFiles(File file) {
        if (file.isDirectory()) {
            System.out.println("文件夾:" + file.getAbsolutePath());
            File[] files = file.listFiles((File pathname)->"b.txt".equals(pathname.getName())||pathname.isDirectory());
            for (File file1 : files) {
                queryFiles(file1);
            }
        } else {
            System.out.println("文件名" + file.getAbsolutePath());
        }
    }
}

1、7總結:

File類是文件和目錄路徑名的抽象表示,主要用於文件和目錄的創建、查找和刪除等操作。而文件的操作在軟件設計的任何時刻都是至關重要的知識點,熟練掌握File對文件的操作對後面框架本身還是其代碼原理的解讀都有極大的幫助。

能力尚淺,有待進步,如有不足,不吝賜教!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章