File類總結(jié)

最近一直在忙項目,所以沒有及時更新小知識,今天就為大家講一下file的知識點。首先呢,我們需要了解文件路徑的概念。文件路徑就是文件在電腦中的位置,表示文件路徑的方式有兩種:相對路徑和絕對路徑。相對路徑是指目標(biāo)相對于當(dāng)前文件的路徑,例如:“./index.html”。絕對路徑:從盤符開始的路徑或者網(wǎng)址的全路徑,例如“C:\windows\system32\cmd.exe”或者“https://blog.csdn.net/Qingai521”。

相對路徑表示的方法:

  • ./ :代表文件所在的目錄(可以省略不寫)
  • ../ :代表文件所在的父級目錄
  • ../../ :代表文件所在的父級目錄的父級目錄
  • / :代表文件所在的根目錄
File構(gòu)造方法

注意:File沒有無參構(gòu)造方法, 因為創(chuàng)建一個File對象必須要指向某個路徑才行,而這個路徑就是調(diào)用有參構(gòu)造方法傳入的。

File(String pathname):根據(jù)一個路徑得到File對象。

File(String parent, String child):根據(jù)一個目錄和一個子文件/目錄得到File對象

File(File parent, String child):根據(jù)一個父File對象和一個子文件/目錄得到File對象

代碼演示:

public static void demo1() {
    File file = new File("F:\\double\\video\\today.avi");//絕對路徑
    System.out.println(file.exists());  

    File file2 = new File("xxx.txt");   //相對路徑 相對于項目而言
    System.out.println(file2.exists());

    File file3 = new File("yyy.txt");   //相對路徑 相對于項目而言
    System.out.println(file3.exists());
}

public static void demo2() {
    String parent = "F:\\double\\video";
    String child = "today.avi";
    File file = new File(parent,child);
    System.out.println(file.exists());
}
        
public static void main(String[] args) {
    File parent = new File("F:\\double\\video");
    String child = "today.avi";
    File file = new File(parent, child);
    System.out.println(file.exists());
    System.out.println(parent.exists());
}
File創(chuàng)建功能

public boolean createNewFile():創(chuàng)建文件,如果存在這樣的文件,就不創(chuàng)建了;

public boolean mkdir()//只會建立一級的文件夾;

public boolean mkdirs():創(chuàng)建文件夾,如果父文件夾不存在,會幫你創(chuàng)建出來;

代碼演示:

public static void main(String[] args) throws IOException {
        File dir1 = new File("aaa");
        System.out.println(dir1.mkdir());//創(chuàng)建成功則返回true,如果該目錄存在則返回false
        
        File dir2 = new File("bbb.txt");//這樣寫是可以的,文件夾也是可以有后綴的
        System.out.println(dir2.mkdir());//雖然傳入的是"bbb.txt",但是創(chuàng)建的是文件夾
        
        File dir3 = new File("ccc\\ddd");
        System.out.println(dir3.mkdirs()); //創(chuàng)建多級目錄
}
public static void demo() throws IOException {
    File file = new File("yyy.txt");
    System.out.println(file.createNewFile());//如果沒有就創(chuàng)建,返回true

    File file2 = new File("zzz");
    //可以不寫后綴,創(chuàng)建成功則返回true;如果文件已經(jīng)存在 就返回false
    System.out.println(file2.createNewFile());
}
File刪除功能

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

注意:Java中的刪除不走回收站;要刪除一個文件夾,請注意該文件夾內(nèi)不能包含文件或者文件夾。

代碼演示:

public static void main(String[] args) {
    File file1 = new File("yyy.txt");
    System.out.println(file1.delete());//刪除文件
    
    File file2 = new File("aaa");
    System.out.println(file2.delete());//刪除文件夾
    
    File file3 = new File("ccc");   //如果刪除一個文件夾,那么文件夾必須是空的
    System.out.println(file3.delete());
}
File重命名功能

public boolean renameTo(File dest):把文件重命名為指定的文件路徑

注意:如果路徑名相同,就是改名;如果路徑名不同,就是改名并剪切。

代碼演示:

public static void demo() {
    File file1 = new File("ooo.txt");
    File file2 = new File("D:\\xxx.txt");
    System.out.println(file1.renameTo(file2));  //不同路徑,剪切并改名;改名成功則返回true
}
File判斷功能

public boolean isDirectory():判斷是否是目錄

public boolean isFile():判斷是否是文件

public boolean exists():判斷是否存在

public boolean canRead():判斷是否可讀

public boolean canWrite():判斷是否可寫

public boolean isHidden():判斷是否隱藏

注意:windows系統(tǒng)認(rèn)為所有的文件都是可讀的;canWrite() 與windows系統(tǒng)文件的“只讀”屬性有關(guān);isHidden() 與windows系統(tǒng)文件的“隱藏”屬性有關(guān)

代碼演示:

public static void main(String[] args) {
    File file = new File("zzz");
    file.setReadable(false);
    System.out.println(file.canRead());     //windows系統(tǒng)認(rèn)為所有的文件都是可讀的
    file.setWritable(true);
    System.out.println(file.canWrite());    //windows系統(tǒng)可以設(shè)置為不可寫
    
    File file2 = new File("aaa.txt");
    System.out.println(file2.isHidden());   //判斷是否是隱藏文件
    System.out.println(file.isHidden());
}

public static void demo() {
    File dir1 = new File("ccc");
    System.out.println(dir1.isDirectory()); //判斷是否是文件夾
    
    File dir2 = new File("zzz");
    System.out.println(dir2.isDirectory());
    
    System.out.println(dir1.isFile());  //判斷是否是文件
    System.out.println(dir2.isFile());
}
File獲取功能
  • public String getAbsolutePath():獲取絕對路徑

  • public String getPath():獲取路徑

  • public String getName():獲取名稱

  • public long length():獲取長度。字節(jié)數(shù)

  • public long lastModified():獲取最后一次的修改時間,毫秒值

  • public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱數(shù)組

  • public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數(shù)組

    注意:getPath() 獲取的是構(gòu)造方法里面?zhèn)魅氲穆窂?/p>

代碼演示:

public static void main(String[] args) {
    File dir = new File("F:/double/day/video");
    String[] arr = dir.list();      //獲取F:/double/day/video下所有的文件和文件夾的名稱
    
    for (String string : arr) {
        System.out.println(string);
    }
    
    File[] subFiles = dir.listFiles();
    
    for (File file : subFiles) {        //獲取F:/double/day/video下所有的文件和文件夾對象
        System.out.println(file);
    }
}

public static void demo() {
    File file1 = new File("ccc.txt");
    File file2 = new File("D:\\double\\day\\ccc.txt");
    System.out.println(file1.getAbsolutePath());    //獲取絕對路徑
    System.out.println(file2.getAbsolutePath());
    
    System.out.println(file1.getPath());        //獲取構(gòu)造方法中傳入路徑
    System.out.println(file2.getPath());
    
    System.out.println(file1.getName());        //獲取文件或者文件的名字
    System.out.println(file2.getName());
    
    System.out.println(file1.length());
    
    Date d = new Date(file1.lastModified());    //文件的最后修改時間
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
    System.out.println(sdf.format(d));
}
案例:獲取指定目錄下以.jpg結(jié)尾的文件

?

public static void main(String[] args) {
        File dir = new File("E:\\");
        //方法一
        File[] subFiles = dir.listFiles();  //獲取e盤下所有的文件或文件夾對象
        for (File subFile : subFiles) {
            //判斷是否是文件 判斷文件的名字是否以.jpg結(jié)尾
            if(subFile.isFile() && subFile.getName().endsWith(".jpg")) {
                System.out.println(subFile);    //這樣方法就只能獲取到以.jpg結(jié)尾的文件
            }
        }
        
        //方法二
        String[] arr = dir.list(new FilenameFilter() {
            
            @Override
            public boolean accept(File dir, String name) {  
                //dir就是new File("E:\\")對象。name 就是E盤下每個文件和文件夾的名字
                File file = new File(dir, name);    //把E盤下每個文件名稱封裝成File對象
                return file.isFile() && file.getName().endsWith(".jpg");//判斷E盤下每個文件對象 是否是文件 判斷文件的名字是否以.jpg結(jié)尾
            }
        });
        
        for (String string : arr) {
            System.out.println(string);
        }
    }

文件名稱過濾器的使用源碼分析

public File{
    public String[] list(FilenameFilter filter) {   //filter接收我們傳入的文件名稱過濾器對象(也就是傳入的匿名內(nèi)部類)
        String names[] = list();    //獲取this對象下所有的文件和文件夾的名字存到names[]數(shù)組中
        if ((names == null) || (filter == null)) {//判斷文件過濾器是否為null
            return names;
        }
        //創(chuàng)建一個ArrayList集合,用來保存文件名稱過濾器過濾出來的文件名稱
        List<String> v = new ArrayList<>(); 
        for (int i = 0 ; i < names.length ; i++) {//遍歷names[]數(shù)組
            if (filter.accept(this, names[i])) {//用傳入的文件名稱過濾器對象(也就是傳入的匿名內(nèi)部類)調(diào)用accept方法(就是匿名內(nèi)部類中重寫的方法),并且傳入this和this對象下每個文件和文件夾的名字,看是否符合過濾器過濾條件
                v.add(names[i]);        //如果符合過濾器過濾條件 就添加到集合中
            }
        }
        return v.toArray(new String[v.size()]);//把集合轉(zhuǎn)成數(shù)組并返回
    }
}

好了今天就先說到這了,明天繼續(xù)。想了解更多學(xué)習(xí)知識,請關(guān)注微信公眾號“阿Q說”,獲取更多學(xué)習(xí)資料吧!你也可以后臺留言說出你的疑惑,阿Q將會在后期的文章中為你解答。每天學(xué)習(xí)一點點,每天進(jìn)步一點點。
?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容