Java學習總結:41(文件操作類:File)

Java文件操作類:File

在java.io包中,如果要進行文件自身的操作(例如:創建、刪除等),只能依靠java.io.File類完成。
File類的常用操作方法

No. 方法 類型 描述
1 public File(String pathname) 構造 傳遞完整文件操作路徑
2 public File(File parent,String child) 構造 設置父路徑與子文件路徑
3 public boolean createNewFile() throws IOException 普通 創建新文件
4 public boolean exists() 普通 判斷給定路徑是否存在
5 public boolean delete() 普通 刪除指定路徑的文件
6 public File getParentFile() 普通 取得當前路徑的父路徑
7 public boolean mkdirs() 普通 創建多級目錄
8 public long length() 普通 取得文件大小,以字節爲單位返回
9 public boolean isFile() 普通 判斷給定路徑是否是文件
10 public boolean isDirectory() 普通 判斷給定路徑是否有目錄
11 public long lastModified() 普通 取得文件的最後一次修改日期時間
12 public String[] list() 普通 列出指定目錄中的全部內容
13 public File[] listFiles() 普通 列出所有的路徑以File類對象包裝

例:文件基本操作

Created with Raphaël 2.2.0開始實例化File類對象(設置完整路徑)文件是否存在?exists()判斷創建新文件結束使用delete()刪除文件yesno
package Project.Study.FileClass;

import java.io.File;

public class Test1 {
    public static void main(String[]args) throws Exception {
        File file=new File("d:\\test.txt");//設置文件的路徑
        if (file.exists()){	//如果存在的話返回“true”,否則就返回“false”
            file.delete();  //存在就將原文件刪除
        }else{
            System.out.println(file.createNewFile());//不存在該文件就創建文件
        }
    }
}

關於路徑分隔符
在Windows系統下,我們使用“\”(本質爲“\”)作爲了分隔符,但在Linux系統中,路徑分隔符爲“/”,這樣就出現了一個問題,在不同操作系統下的路徑分隔符不一樣。因此,在java.io.File類裏面提供有一個路徑分隔符常量:public static final String separator,利用該常量可以在不同操作系統中自動轉化爲適合於該操作系統的路徑分隔符。所以,在實際開發中,往往會使用如下形式的操作代碼:

File file=new File("d:"+File.separator+"test.txt");//設置文件的路徑

例:創建帶路徑的文件

Created with Raphaël 2.2.0開始實例化File類對象(設置完整路徑)父路徑是否存在?創建新文件結束 創建父路徑file.getParentFile.mkdirs();yesno
package Project.Study.FileClass;

import java.io.File;

public class Test2 {
    public static void main(String[] args) throws Exception {
        File file1 = new File("d:" + File.separator + "IDEA" + File.separator + "JAVA1" + File.separator + "src" + File.separator + "Project" + File.separator + "Study" + File.separator + "FileClass" + File.separator + "test.txt");
        File file2 = new File("d:" + File.separator + "IDEA" + File.separator + "JAVA1" + File.separator + "src" + File.separator + "Project" + File.separator + "Study" + File.separator + "FileClass" + File.separator + "1" + File.separator + "test.txt");
        if (!file1.getParentFile().exists()) {//現在父路徑不存在
            file1.getParentFile().mkdirs();//直接創建父路徑
        }
        System.out.println(file1.createNewFile());//創建新文件
        if (!file2.getParentFile().exists()) {
            file2.getParentFile().mkdirs();
        }
        System.out.println(file2.createNewFile());

    }
}

結果:
在這裏插入圖片描述
直接多出來一個名稱爲“1”的文件夾,證明上程序中的對象file2創建父路徑成功了。

例:取得文件或目錄的信息

package Project.Study.FileClass;

import java.io.File;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test3 {
    public static void main(String[]args)throws Exception{
        File file=new File("d:"+File.separator+"my.jpg");//設置文件路徑
        if (file.exists()){
            System.out.println("是否有文件:"+(file.isFile()));
            System.out.println("是否是目錄:"+(file.isDirectory()));
            //文件大小是按照字節單位返回的數字,所以需要將字節轉換爲兆(M)的單元
            //但是考慮到小數點問題,所以使用BigDecimal處理
            System.out.println("文件大小:"+(new BigDecimal((double)file.length()/1024/1024).divide(new BigDecimal(1),2,BigDecimal.ROUND_HALF_UP))+"M");
            //返回的日期是以long的形式返回,可以利用SimpleDateFormat進行格式化操作
            System.out.println("上次修改時間:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(file.lastModified())));
        }
    }
}
//結果:
//是否有文件:true
//是否是目錄:false
//文件大小:0.10M
//上次修改時間:2020-04-13 10:58:09

例:列出目錄信息

package Project.Study.FileClass;

import java.io.File;

public class Test4 {
    public static void main(String[]args){
        File file=new File("d:"+File.separator);
        if (file.isDirectory()){//判斷當前路徑是否爲目錄
            File[]result=file.listFiles();
            for (File x:result
                 ) {
                System.out.println(x);
            }
        }
    }
}
//結果:
//d:\$RECYCLE.BIN
//d:\blog
//d:\CSDN博客
//d:\Github_Daily code
//d:\Github_Holiday-repository
//d:\IDEA
//d:\Inno Setup 6
//d:\JAVA
//d:\JAVA_study
...

上程序列出了我D盤當前路徑中的所有內容。

例:列出指定目錄下的所有文件及子目錄信息

Created with Raphaël 2.2.0開始實例化File類對象(設置完整路徑)調用print()方法路徑是否 爲目錄?列出目錄中的 信息file.listFile()信息可以 列出? 循環File()數組輸出File類對象(取得文件完整路徑)結束yesnoyesno
package Project.Study.FileClass;

import java.io.File;

public class Test5 {
    public static void main(String[]args){
        File file=new File("d:"+File.separator);    //定義操作路徑
        print(file);                                //列出目錄
    }

    /**
     * 列出目錄結構,此方法採用遞歸調用方式
     * @param file 要列出目錄的路徑
     */
    public static void print(File file){
        if (file.isDirectory()){            //路徑爲目錄
            File[]result=file.listFiles();  //列出子目錄
            if (result!=null){              //目錄可以列出
                for (File x:result) {                    
                    print(x);               //遞歸調用
                }
            }
        }
        System.out.println(file);           //直接輸出完整路徑
    }
}
//結果:
//d:\vs2013\Common7\Tools\2052\vcupgradeui.dll
//d:\vs2013\Common7\Tools\2052
//d:\vs2013\Common7\Tools\errlook.exe
//d:\vs2013\Common7\Tools\errlook.hlp
//d:\vs2013\Common7\Tools\guidgen.exe
//d:\vs2013\Common7\Tools\makehm.exe
//d:\vs2013\Common7\Tools\ProjectComponents\Microsoft.Collections.Immutable.dll
//...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章