1. 程式人生 > 其它 >JavaSE常用類之File類

JavaSE常用類之File類

File類

只用於表示檔案或目錄的資訊,不能對檔案內容進行訪問。

java.io.File類∶代表檔案和目錄。在開發中,讀取檔案、生成檔案、刪除檔案、修改檔案的屬性時經常會用到本類。

File類不能訪問檔案內容本身,如果需要訪問檔案內容本身,則需要藉助輸入輸出流。

一.建立檔案物件

package Filel;

import java.io.File;

public class Filelfd {
    public static void main(String[] args) {
        //建立一個File物件
        File file = new File("D:\\R");
        System.out.println(file);                              //D:\R
        //user.dir 使用者目錄
        System.out.println(System.getProperty("user.dir"));    //D:\JavaSE\OPP
    }
}

二.建立檔案

package Filel;

import java.io.File;
import java.io.IOException;

//假設要建立一個 zyx.txt 檔案,程式啟動時會檢測該檔案是否存在,如果不存在則建立;如果存在則刪除它再建立。
public class Filelc {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\zyx.txt");   //建立file物件
        if(file.exists()){   //判斷檔案是否存在
            file.delete();   //刪除檔案
            System.out.println("檔案已刪除");
        }
        //建立新的檔案
        try {
            //建立新的檔案
            file.createNewFile();       //需要丟擲
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("檔案已重新建立");
    }
}

三.檢視檔案屬性

package Filel;

import java.io.File;
import java.util.Date;
//檢視檔案基本屬性
public class Filefs {
    public static void main(String[] args) {
        String path1="D:\\SteamLibrary\\steamapps\\common\\Tricolour Lovestory\\savedata\\chs";
        String path2="JavaSE";
        showFileDetails(path1);
        showFileDetails(path2);
    }
    public static void showFileDetails(String path){
        File file = new File(path);
        System.out.println("==========================================");
        System.out.println("檔名字:"+file.getName());
        System.out.println("檔案長度:"+file.length()+"位元組");
        System.out.println((file.isDirectory()? "是目錄" : "是檔案" ));
        System.out.println((file.canRead()? "能讀" : "不能讀" ));
        System.out.println((file.canWrite()? "能寫" : "不能寫" ));
        System.out.println((file.isHidden()? "隱藏" : "沒隱藏" ));
        System.out.println("檔案路徑:"+file.getPath());
        System.out.println("檔案帶域名的完整路徑:"+file.getAbsolutePath());
        System.out.println("伺服器端檔案的最後修改時間:"+new Date(file.lastModified()));
        System.out.println("==========================================");
        
    }
}

四.檔案修改、檢視、刪除等。

1.遞迴遍歷輸出目錄檔案

通過遍歷目錄可以在指定的目錄中查詢檔案,或者顯示所有的檔案列表。File 類的 list() 方法提供了遍歷目錄功能,該方法有如下兩種過載形式。

String[] list():該方法表示返回由 File 物件表示目錄中所有檔案和子目錄名稱組成的字串陣列,如果呼叫的 File 物件不是目錄,則返回 null。

String[] list(FilenameFilter filter):該方法的作用與 list() 方法相同,不同的是返回陣列中僅包含符合 filter 過濾器的檔案和目錄,如果 filter 為 null,則接受所有名稱。

使用過濾器輸出指定的檔案,假設希望只列出目錄下的某些檔案,這就需要呼叫帶過濾器引數的 list() 方法。首先需要建立檔案過濾器,該過濾器必須實現 java.io.FilenameFilter 介面,並在 accept() 方法中指定允許的檔案型別。

2.delete和deleteOnExit方法的區別。

delete()方法:當呼叫delete()方法時,直接刪除檔案,不管該檔案是否存在,一經呼叫立即執行;

deleteOnExit()方法:即該方法是將刪除的命令快取了一下,到服務停止的時候再進行操作

file.deleteOnExit();    
file.createNewFile();

此處的deleteOnExit()是在JVM退出的時候才執行的,因此相當於是先呼叫了createNewFile()再呼叫deleteOnExit();

package Filel;
import java.io.File;
import java.io.FilenameFilter;
public class Filexg {
    public static void main(String[] args) {
        File file = new File("D:\\www\\zys.txt");
        //設定檔案只讀(只能開啟來觀看,不能修改也不能儲存)
        //該方法返回布林資料型別。如果File物件可以設定為Read Only,則該函式返回true,否則返回false。
        System.out.println(file.setReadOnly());
        //檔案重新命名
        //該方法返回布林資料型別。如果File物件修改成功,則該函式返回true,否則返回false。
        File dest = new File("D:\\www\\zyl.txt");
        boolean b = file.renameTo(dest);  //修改file物件名字
        System.out.println(b);
        //檔案刪除
        
        File l = new File("D:\\www\\zzx.txt");
        l.deleteOnExit();

        File dir = new File("D:\\www");
        //目錄的建立
       // dir.mkdirs();//可以建立多級目錄
        dir.mkdir();//只能建立一級目錄
        //目錄的讀取
        System.out.println("修改時間:"+dir.lastModified());
        System.out.println("目錄路徑:"+dir.getPath());
        System.out.println("目錄名:"+dir.getName());
        //目錄名修改
        dir.renameTo(new File("D:\\www22"));
        //目錄刪除
        dir.deleteOnExit();
        
        //***遞迴遍歷輸出目錄檔案****

        //獲取當前目錄下的所有檔案及檔名
        File hx = new File("D:\\www22");
        String[] paths = hx.list();
        for (String path : paths) {
            System.out.println(path);
        }
        System.out.println("===============================");
        //)獲取指定目錄所有檔案帶域名完整目錄物件
        File[] fs = hx.listFiles();
        for(File f: fs){
            System.out.println(f);
        }
        //獲取指定格式的檔案資訊
        //過濾器
        File[] files = hx.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
               return name.startsWith("z");
            }
        });
        for (File ol : files) {
            System.out.println(ol.getName()+" : "+ol.getPath());
        }
    }
}

五.列舉

enum 列舉名 {
    列舉體(常量列表)
}

當你需要定義一組常量時,可以使用列舉型別

package Filel;

import java.util.Random;
//列舉
public class Filemeiju {

    enum Week {
        週一, 週二, 週三, 週四, 週五, 週六,週日
    }
    public static void main(String[] args) {
        //Week.values()相當於陣列名字 = args
        //Week.values()[i]=args[i]
        //Week.values().for
        for (Week value : Week.values()) {
            System.out.print(value+" ");
        }
        System.out.println();
        System.out.println("############################");
        Random random = new Random();
        int i= random.nextInt(7);
        System.out.println(i);
        switch (Week.values()[i]){
            case 週一:
                System.out.println("週一啦");
                break;
            case 週二:
                System.out.println("週二啦");
                break;
            case 週三:
                System.out.println("週三啦");
                break;
            case 週四:
                System.out.println("週四啦");
                break;
            case 週五:
                System.out.println("週五啦");
                break;
            case 週六:
                System.out.println("週六啦");
                break;
            case 週日:
                System.out.println("週日啦");
                break;
        }
    }
}