File類

File類

IO流(Input Output) :
IO技術(shù)主要的作用是解決設(shè)備與設(shè)備之間的數(shù)據(jù)傳輸問題
比如: 硬盤--->內(nèi)存、內(nèi)存的數(shù)據(jù)---->硬盤上、 把鍵盤的數(shù)據(jù)------->內(nèi)存中

IO技術(shù)的應(yīng)用場(chǎng)景:
導(dǎo)出報(bào)表、上傳大頭照 、下載 、解釋xml文件 ...

數(shù)據(jù)保存到硬盤上,該數(shù)據(jù)就可以做到永久性的保存。 數(shù)據(jù)一般是以文件的形式保存到硬盤上
sun使用了一個(gè)File類描述了文件或者文件夾的。
File類可以描述一個(gè)文件或者一個(gè)文件夾。

一、File類的構(gòu)造方法

File(String pathname)  指定文件或者文件夾的路徑創(chuàng)建一個(gè)File文件。

File(File parent, String child)   根據(jù) parent 抽象路徑名和 child 路徑名字符串創(chuàng)建一個(gè)新 File 實(shí)例。 

File(String parent, String child) 

目錄分隔符: 在windows機(jī)器上的目錄分隔符是 \ ,在linux機(jī)器上的目錄分隔符是/ .通過File.separator就可以獲得對(duì)應(yīng)系統(tǒng)上的分隔符

注意: 在windows上面\ 與 / 都可以使用作為目錄分隔符。 而且,如果寫/ 的時(shí)候只需要寫一個(gè)即可。

public class Demo1 {
    
    public static void main(String[] args) {
        //File file = new File("F:"+File.separator+"a.txt"); // 
        File file = new File("F:/a.txt"); 
        
        /*File parentFile = new File("F:\\");
        File file = new File("F:\\","a.txt");*/
        // exists 判斷該文件是否存在,存在返回true,否則返回false。
        System.out.println("存在嗎? "+ file.exists());  
//      System.out.println("目錄分隔符:"+ File.separator);
    }
    
}

路徑問題

  • 絕對(duì)路徑: 該文件在硬盤上 的完整路徑。絕對(duì)路徑一般都是以盤符開頭的。
  • 相對(duì)路徑: 相對(duì)路徑就是資源文件相對(duì)于當(dāng)前程序所在的路徑。

. 當(dāng)前路徑

.. 上一級(jí)路徑

注意:如果程序當(dāng)前所在的路徑與資源文件不是在同一個(gè)盤下面,是沒法寫相對(duì)路徑的。

public class Demo2 {

    public static void main(String[] args) {
        File file = new  File(".");
        System.out.println("當(dāng)前路徑是:"+ file.getAbsolutePath());
        
        File file2 = new File("..\\..\\a.txt");
        System.out.println("存在嗎?"+ file2.exists());
        
    }
    
}

二、創(chuàng)建方法

  • createNewFile() 在指定位置創(chuàng)建一個(gè)空文件,成功就返回true,如果已存在就不創(chuàng)建然后返回false
  • mkdir() 在指定位置創(chuàng)建目錄,這只會(huì)創(chuàng)建最后一級(jí)目錄,如果上級(jí)目錄不存在就拋異常。
  • mkdirs() 在指定位置創(chuàng)建目錄,這會(huì)創(chuàng)建路徑中所有不存在的目錄。
  • renameTo(File dest) 重命名文件或文件夾,也可以操作非空的文件夾,文件不同時(shí)相當(dāng)于文件的剪切,剪切時(shí)候不能操作非空的文件夾。移動(dòng)/重命名成功則返回true,失敗則返回false。
public class Demo3 {
    
    public static void main(String[] args) throws IOException {
        File file = new File("F:\\aa.txt");
        //createNewFile 創(chuàng)建一個(gè)指定的文件,如果該文件存在了,則不會(huì)再創(chuàng)建,如果還沒有存在則創(chuàng)建。
        //創(chuàng)建成功返回true,否則返回false。
        System.out.println("創(chuàng)建成功了嗎?"+file.createNewFile()); 
        
        File dir = new  File("F:\\a.txt");
        System.out.println("創(chuàng)建文件夾成功嗎?"+dir.mkdir()); // mkdir 創(chuàng)建一個(gè)單級(jí)文件夾,
        dir = new File("F:\\aa\\bb");
        System.out.println("創(chuàng)建多級(jí)文件夾:"+ dir.mkdirs());
        
        //renameTo()  如果目標(biāo)文件與源文件是在同一個(gè)路徑下,那么renameTo的作用是重命名, 
        //如果目標(biāo)文件與源文件不是在同一個(gè)路徑下,那么renameTo的作用就是剪切,而且還不能操作文件夾。 
        File destFile = new File("F:\\abc.txt");
        System.out.println("重命名成功嗎?"+file.renameTo(destFile)) ; 
        
    }

}

三、刪除方法

  • delete() 刪除文件或一個(gè)空文件夾,如果是文件夾且不為空,則不能刪除,成功返回true,失敗返回false。
  • deleteOnExit() 在虛擬機(jī)終止時(shí),請(qǐng)求刪除此抽象路徑名表示的文件或目錄,保證程序異常時(shí)創(chuàng)建的臨時(shí)文件也可以被刪除

判斷方法:

  • exists() 文件或文件夾是否存在。
  • isFile() 是否是一個(gè)文件,如果不存在,則始終為false。
  • isDirectory() 是否是一個(gè)目錄,如果不存在,則始終為false。
  • isHidden() 是否是一個(gè)隱藏的文件或是否是隱藏的目錄。
  • isAbsolute() 測(cè)試此抽象路徑名是否為絕對(duì)路徑名。
public class Demo4 {
    
    public static void main(String[] args) {
    /*  
        刪除的。
     * File file = new File("F:\\a.txt");
        System.out.println("刪除成功嗎? "+ file.delete()); //delete方法不能用于刪除非空的文件夾。 delete方法會(huì)馬上刪除一個(gè)文件。
        file.deleteOnExit();  //jvm退出的時(shí)候刪除文件。  一般用于刪除臨時(shí) 文件。     
        System.out.println("哈哈哈");
        
        判斷
    */
        File file = new File("..\\..\\a.txt");
        System.out.println("存在嗎?"+ file.exists());
        System.out.println("判斷是否是一個(gè)文件:"+file.isFile()); //如果是文件返回true,否則返回false.
        System.out.println("判斷是否是一個(gè)文件夾:"+ file.isDirectory()); // 是文件夾返回ture,否則返回false.
        System.out.println("是隱藏的 文件嗎:"+ file.isHidden());
        System.out.println("是絕對(duì)路嗎?"+ file.isAbsolute());
    }   

}

四、獲取方法

  • getName() 獲取文件或文件夾的名稱,不包含上級(jí)路徑。
  • getPath() 返回絕對(duì)路徑,可以是相對(duì)路徑,但是目錄要指定
  • getAbsolutePath() 獲取文件的絕對(duì)路徑,與文件是否存在沒關(guān)系
  • length() 獲取文件的大?。ㄗ止?jié)數(shù)),如果文件不存在則返回0L,如果是文件夾也返回0L。
  • getParent() 返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回null。
  • lastModified() 獲取最后一次被修改的時(shí)間。
public class  Demo5{

    public static void main(String[] args) {
        File file = new File("..\\..\\a.txt");
        System.out.println("文件名:"+ file.getName());
        System.out.println("獲取絕對(duì)路徑:"+ file.getPath());
        System.out.println("getAbsolutePath獲取絕對(duì)路徑:"+file.getAbsolutePath());
        System.out.println("獲取文件的的大小(字節(jié)為單位):"+ file.length());
        System.out.println("獲取文件的父路徑:"+ file.getParent());
        
        //使用毫秒值轉(zhuǎn)換成Date對(duì)象
        long lastModified = file.lastModified();
        Date date = new Date(lastModified); 
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日  HH:mm:ss");
        System.out.println("獲取最后一次的修改時(shí)間(毫秒值):"+ dateFormat.format(date) );
        
    }

}

文件夾相關(guān):

  • staic File[] listRoots() 列出所有的根目錄(Window中就是所有系統(tǒng)的盤符)
  • list() 返回目錄下的文件或者目錄名,包含隱藏文件。對(duì)于文件這樣操作會(huì)返回null。
  • listFiles() 返回目錄下的文件或者目錄對(duì)象(File類實(shí)例),包含隱藏文件。對(duì)于文件這樣操作會(huì)返回null。
  • list(FilenameFilter filter) 返回指定當(dāng)前目錄中符合過濾條件的子文件或子目錄。對(duì)于文件這樣操作會(huì)返回null。
  • listFiles(FilenameFilter filter) 返回指定當(dāng)前目錄中符合過濾條件的子文件或子目錄。對(duì)于文件這樣操作會(huì)返回null。
public class Demo6 {
    
    public static void main(String[] args) {
        /*File[] roots = File.listRoots(); //列出所有的根目錄
        for(File file  : roots){
            System.out.println(file);
        }*/
        
        File file = new File("F:\\workspace\\mydemo");
        
        /*
        String[] fileNames = file.list(); //把當(dāng)前文件夾下面的所有子文件名與子文件夾名 存儲(chǔ)到一個(gè)String類型 的數(shù)組中 返回。
        for(String fileName : fileNames){
            System.out.println(fileName);
        }*/
        
        
        File[] files = file.listFiles(); // 把當(dāng)前文件夾下面的所有子文件與子文件夾都使用了一個(gè)File對(duì)象描述,然后把這些File對(duì)象存儲(chǔ)到一個(gè)FIle數(shù)組中返回
        for(File fileItem : files){
            System.out.println("文件名:"+ fileItem.getName());
        }
    }

}

1.指定一個(gè)文件夾,然后該文件夾下面所有java文件。
2.指定一個(gè)文件夾,然后列出文件夾下面的所有子文件與文件夾,但是格式要如下:

文件:
    文件名1
    文件名2
    文件名3
    ..

文件夾:
    文件夾名1
    文件夾名2
    文件夾名3
    ....

demo:

// 自定義一個(gè)文件名過濾器
class MyFilter implements FilenameFilter{

    @Override
    public boolean accept(File dir, String name) {
        //System.out.println("文件夾:"+dir+" 文件名:"+ name);
        return name.endsWith(".java");
    }
    
}

public class Demo7 {
    
    public static void main(String[] args) {
        File dir = new File("F:\\1208\\day06\\代碼\\day06");
        listJava2(dir);
        
    }
    
    public static void listJava2(File dir){
        File[] files = dir.listFiles(new MyFilter()); //得到文件夾下面的所有子文件與文件夾。
        for(File file : files){
            System.out.println(file.getName());
        }
    }

    //列出所有的java文件
    public static void listJava(File dir){
        File[] files = dir.listFiles(); //獲取到了所有的子文件
        for(File file : files){
            String fileName = file.getName();
            /*if(fileName.endsWith(".java")&&file.isFile()){
                System.out.println(fileName);
            }*/
            
            if(fileName.matches(".+\\.java")&&file.isFile()){
                System.out.println(fileName);
            }
            
        }
    }
    
    public static void listFile(File dir){
        File[] files = dir.listFiles();//獲取到所有的子文件
        System.out.println("文件:");
        for(File fileItem : files){
            if(fileItem.isFile()){
                System.out.println("\t"+fileItem.getName());
            }
        }
        
        System.out.println("文件夾:");
        for(File fileItem : files){
            if(fileItem.isDirectory()){
                System.out.println("\t"+fileItem.getName());
            }
        }
        
    }
    
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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