JAVA基礎之File類


個人理解:

  File是個文件類,可以用其增加、刪除、查找某種類型的文件或者文件夾,同時根據其成員變量的特點可以綜合利用,避免出現跨系統的時候出現錯誤,並且查找時最好輸入絕對路徑,以免出現不存在的文件。使用遞歸時一定要主要好停止,以免棧內存溢出。

一、簡述IO操作:

當需要把內存中的數據存儲到持久化設備上的這個動作稱為輸出(寫)output操作;

當把持久設備上的數據讀取到內存中的這個動作稱為輸入(讀)input操作。

這個輸入和輸出的動作稱為IO操作。

二、File類:

1、文件類:

成員變量:

import java.io.File;

public class Demo01 {
    public static void main(String[] args) {
        //File類
        //文件:File
        //目錄(文件夾):directory
        //路徑:path
        //路徑分隔符(與系統有關的)<windows里面是 ; linux里面是 : >
        System.out.println(File.pathSeparator);  //   ;
        //與系統有關的路徑名稱分隔符<windows里面是 \ linux里面是/ >
        System.out.println(File.separator);      //  \
    }
}

2、構造函數:

import java.io.File;

public class Demo02 {
    public static void main(String[] args) {
        File file=new File("D:\\java\\b.txt");  //雙\\是轉義
        System.out.println(file);
        File file2=new File("D:\\java","a.txt");//父路徑、子路徑--可以適用於多個文件的!
        System.out.println(file2);
        File parent=new File("D:\\java");
        File file3=new File(parent,"a.txt");//File類的父路徑、子路徑
        System.out.println(file3);
    }
}

3、File類的獲取及文件的創建和刪除、判斷:

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

public class Demo03 {
    public static void main(String[] args) throws IOException {
        method06();
        
    }
    public static void method01(){
        File file=new File("D:\\java\\a.txt");
        //獲取文件對象的絕對路徑
        System.out.println(file.getAbsolutePath());
        File file0=new File("src");//寫相對路徑的話,會自動轉成絕對路徑,但是不去檢驗文件是否真實存在(只會給翻譯回來,可能根本不存在) D:\JAVA0322\Day16\src
        //獲取文件對象的絕對路徑
        System.out.println(file0.getAbsolutePath());
        File file00=new File("aa");//這個根本不存在  D:\JAVA0322\Day16\aa
        //獲取文件對象的絕對路徑
        System.out.println(file00.getAbsolutePath());
        //獲取文件對象的文件名或者目錄名
        System.out.println(file.getName());
        //獲取文件對象的路徑所對應的字符串   類似於toString()方法
        System.out.println(file.getPath());
        //獲取文件的大小(字節---Long類型)
        System.out.println(file.length());
    }
    //文件創建和刪除
    public static void method02() throws IOException{
        File file=new File("D:\\java\\d");
        //創建文件
        boolean flag=file.createNewFile();//都是創建的文件(最好都是加上后綴的),不能是文件夾
        System.out.println(flag);
    }
    //文件刪除
    public static void method03(){
        File file=new File("D:\\java\\d");
        //刪除文件(找不回來了)
        boolean flag=file.delete();
        System.out.println(flag);
    }
    //文件判斷
    public static void method04(){
        File file=new File("D:\\java\\a.txt");
        //判斷該文件對象所對應的文件是否存在
        System.out.println(file.exists());
        //判斷該文件對象是否是文件夾
        System.out.println(file.isDirectory());
        //判斷該文件對象是否是文件
        System.out.println(file.isFile());
    }
    //創建文件夾
    public static void method05(){
        File file=new File("D:\\java\\d.txt");//windows系統內文件夾名字不區分大小寫,最后這個是文件夾的名字
        boolean flag=file.mkdir();
        System.out.println(flag);
    }
    //創建文件夾
        public static void method06(){
            File file=new File("D:\\java\\d\\a\\b");//mkdirs()用於創建多級目錄,經常用的方法,不加s不能創建多級目錄
            boolean flag=file.mkdirs();
            System.out.println(flag);
        }
}

4、listFiles()方法介紹

import java.io.File;

public class Demo04 {
    public static void main(String[] args) {
        method03();
    }
    public static void method01(){
        File file=new File("D:\\java");
        //獲取該路徑下的文件和文件夾
        String[] arr=file.list();
        //遍歷
        for(String s:arr){
            System.out.println(s);//返回文件的全部的名字
        }
    }
    public static void  method02(){
        File file=new File("D:\\java");
        //獲取該路徑下的文件和文件夾所對應的文件對象
        File[] files=file.listFiles();
        for(File f:files){
            System.out.println(f);//獲得的其絕對路徑---根本方法
        }
    }
}

需要注意的是:

①、指定的目錄也就是文件夾必須存在;

②、指定的必須是目錄。否則會空指針。

4、文件過濾器:

FileFilter 與FilenameFilter都是接口:

 public static void  method03(){
        File file=new File("D:\\java");
        //獲取該路徑下的文件和文件夾所對應(括號內為條件,也就是某個類型)的文件對象
        File[] files=file.listFiles(new MyFileFilter());
        for(File f:files){
            System.out.println(f);//獲得的其絕對路徑---根本方法
        }
    }
import java.io.File;
import java.io.FileFilter;
//過濾器:
public class MyFileFilter implements  FileFilter{

    public boolean accept(File pathname) {
        /*//獲取文件名
        String filename=pathname.getName();
        //判斷文件名是否以.txt結尾
        boolean flag=filename.endsWith(".txt");
        return flag;
    */
        return pathname.getName().endsWith(".txt");
    
    }
}

三、遞歸:

  在當前方法內調用自己的現象

//遞歸
public class Demo01 {

    public static void main(String[] args) {
        int sum=get(100);
        System.out.println(sum);
    }
    //用遞歸計算1-100的和
    public static int get( int num){
        if(num==1){
            return 1;
        }
        return num +get(num-1);
    }
}
import java.io.File;

public class Demo02 {
    public static void main(String[] args) {
        File file=new File("D:\\java");
        look(file);
    }
    public static void look(File file){
        //獲取該路徑下所有的文件夾和文件
        File[] files=file.listFiles(new MyFilter());//獲得.txt文件和文件夾
        //遍歷
        for(File f:files){
            //如果是文件夾則繼續尋找
            if(f.isDirectory()){
                look(f);
            }else{//如果不是則打印
                System.out.println(f);
            }
        }
    }
}
import java.io.File;
import java.io.FileFilter;

public class MyFilter    implements FileFilter {

    public boolean accept(File pathname) {
        //獲取以.txt為后綴的文件
        //如果是文件夾,那么放到File[]數組內
        if(pathname.isDirectory()){
            return true;
        }
        return pathname.getName().endsWith(".JaVa");
    }
    
}    

需要注意的是:

1、要保證遞歸能夠停下來;

2、遞歸次數不能太多;

3、構造方法不能遞歸使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM