1. 程式人生 > >java基礎之IO流及遞歸理解

java基礎之IO流及遞歸理解

示例代碼 font hid 再次 調用方法 反斜杠 filter amp 遞歸

一、IO流(簡單理解是input/output流,數據流內存到磁盤或者從磁盤到內存等)

二、File類(就是操作文件和文件夾的)

1FIleFile類構造方法

註意:通過構造方法創建的file對象是在內存裏面,而不是在磁盤裏面。

File(String pathname) 根據指定的路徑名創建file對象

File(String parent, String child) 根據 parent 路徑名字和 child 路徑名創建一個File對象

File(File parent, String child) 根據 parent 文件對象和 child 路徑名 創建一個file對象。

相對路徑 :相對於某個項目的根路徑;

絕對路徑 : 完整的路徑。

1、 創建文件和文件夾相關的方法

boolean createNewFile(); 如果創建成功,則返回true。如果文件已存在,它不會再次進行創建,直接返回false

註意: 如果你的文件路徑不存在,則直接拋出異常

boolean mkdir(); 創建文件夾,如果創建成功,直接返回true。如果文件夾已存在,它不會再次進行創建,直接返回false

註意:如果你的文件路徑不存在,直接返回false

mkdir 1次只能創建1個文件夾,因此我們統一使用mkdirs來創建多級文件夾

createNewFile和mkdir的區別:

1.createNewFile只能創建文件,mkdir只能創建文件夾

2.使用createNewFile的時候,如果路徑不存在,直接拋出異常, 而mkdir是直接返回false

3.createNewFile和mkdir如果路徑都存在,並且文件或者文件夾已經有了,它不會再次進行創建,直接返回false。

3、刪除方法

刪除相關的方法:

boolean delete() 刪除文件或者文件夾

刪除文件:

文件存在,刪除成功,返回true

文件不存在,返回false

刪除文件夾(必須是空的):

文件夾存在,刪除成功,返回true

文件夾不存在,直接返回false

刪除文件夾特點: 如果文件夾嵌套多層,它只能刪除最裏層(只能刪除空文件夾),不能刪除嵌套層

4、正斜杠與反斜杠

獲取分隔符相關的字段(智能選擇/或者\):

static String separator 優點:兼容性非常好;缺點: 維護性可讀性太差了,用起來非常麻煩

windows操作系統裏面 正斜杠和反斜杠它們都支持 ---windows操作系統默認就是 反斜杠

linux操作系統只支持/它不支持反斜杠

綜上,我們統一使用正斜杠 /

1、File類常用方法

boolean createNewFile() 創建文件

String getPath() 獲取路徑名(構造方法傳遞什麽值,你這個方法就獲取到對應的值)

String getAbsolutePath() 獲取文件或者文件夾的絕對路徑,返回字符串表示形式

File getAbsoluteFile() 獲取文件或者文件夾的絕對路徑,返回文件對象

boolean delete() 刪除文件或者文件夾

boolean exists() 判斷文件或者文件夾是否存在

String getName() 獲取文件名或者文件夾名

String getParent() 獲取父文件夾對應的路徑 以字符串的形式展示

File getParentFile() 獲取父文件夾對應的路徑 以文件對象的形式展示

boolean isDirectory() 判斷file對象是否是一個文件夾

boolean isFile() 判斷file對象是否是一個文件

boolean mkdirs() 創建文件夾(可以創建多級文件夾)

2、File類常用轉為數組的方法

只能獲取下一級:

String[] list() 獲取指定文件夾下面的所有文件和文件夾名字(只針對一級) 以字符串的形式展示

File[] listFiles() 獲取指定文件夾下面的文件或者文件夾對象(只針對一級) 以File對象的形式展示

static File[] listRoots() 獲取當前系統系統的根盤符

3、File類常用轉為數組的方法並且帶有過濾器

過濾的相關方法(也只能獲取下一級的文件或者文件夾)

String[] list(FilenameFilter filter) 返回一個字符串數組,這些字符串指定此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。

File[] listFiles(FilenameFilter filter) 返回抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。

File[] listFiles(FileFilter filter) 返回抽象路徑名數組,這些路徑名表示此抽象路徑名表示的目錄中滿足指定過濾器的文件和目錄。

FilenameFilter 、FileFilter 都是接口

三、遞歸(指的就是不斷重復的調用方法自身,註意:遞歸必須要留出口)

示例代碼:

技術分享圖片
public class 遞歸Test2 {
    public static void main(String[] args) {
        遞歸Test2 Test = new 遞歸Test2();
        Test.delete(new File("D:/a.java"), "java");
        
    }
    /**
     * 定義一個方法,刪除傳入的一個文件夾以及下面的所有以Java為後綴的文件或者文件
     * @param file
     * @param suffix
     */
    public void delete(File file,String suffix){
        //如果file不為空並且是一個文件,就將這個文件轉為File類型的數組
        if(file != null && file.isDirectory()){
            File[] list = file.listFiles();
            //如果這個數組不等於null,並且長度不為零,就進行循環
            if(list != null && list.length != 0){
                for (File file2 : list) {
                    //如果這個文件不是空的,比你高且是以Java結尾的,那麽就刪除這個文件
                    if(file2 != null && file2.getName().endsWith(suffix)){
                        file2.delete();
                    }else{
                        //否則這就是一個文件夾,那麽久繼續進行最初的if,也就是掉用自己本身這個方法(叠代)
                        delete(file2,suffix);
                    }
                }
            }
        }else if(file != null && file.isFile()){
            if(file.getName().endsWith(suffix)){
                file.delete();
            }
        }
        
        
    }

}
View Code

java基礎之IO流及遞歸理解