凱哥帶你從零學大數據系列之Java篇---第二十五章:文件操作詳解

課程大綱

  • 文件操作的簡介
  • 絕對路徑和相對路徑
  • 分隔符
  • File類(重點)

1. 文件操作的簡介

顧名思義, 操作磁盤上的某一個文件或者某一個文件夾。 可以對他們進行創建、 刪除、 移動、 屬性獲取、 屬性設置等操作。 但是, 並不包含讀取文件的內容、 拷貝文件。

在Java中, 使用 java.io.File 類描述一個文件, 或者是一個文件夾。

2. 絕對路徑和相對路徑

2.1. 相關概念

路徑: 用來描述一個文件所在的地址, 用來定位一個文件的。 可以分爲絕對路徑相對路徑

絕對路徑: 從磁盤的根目錄開始, 一層層的向下查找, 直到找到這個文件。

例如:
C:\Users\luds\Desktop\集合\assets\map.png
C:\shawn\documents\JavaPDF\IO流.pdf

相對路徑: 找到一個參照物, 相對於這個參照物的路徑。

例如:
assets/collection.png

2.2. 對比

3. 分隔符

3.1. 分隔符的簡介

在描述路徑的字符串中, 有兩種分隔符, 是比較常見的: 目錄分隔符 和 路徑分隔符

目錄分隔符

分隔開一個路徑中的不同的文件夾, 用來描述層級關係、 包含關係。

在不同的操作系統中, 目錄分隔符是不一樣的。 在windows中, 使用 \ 作爲目錄分隔符; 在非windows的操作系統中, 例如: Linux、Unix.. 使用的是 / 作爲目錄分隔符。

理論上來講, 在windows中, 應該使用\作爲目錄分隔符。 但是在有些情況下, 使用/也是可以做目錄分隔符的。

路徑分隔符

分隔開一個字符串中的多個路徑的。

在不同的操作系統中, 路徑分隔符是不一樣的。 在windows中, 使用  作爲路徑分隔符; 在非windows的操作系統中, 例如: Linux、Unix.. 使用的是  作爲路徑分隔符。

3.2. 分隔符的表示

如果你的程序只需要考慮部署在windows平臺, 那麼只需要按照windows的規範書寫就可以; 如果你的程序只需要部署到linux上, 那麼只需要按照linux的規範書寫就可以。 但是, 如果你的程序需要考慮在不同的平臺上部署運行, 此時就需要使用以下方法進行分隔符的獲取。

4. File類

4.1. File類的簡介

File是 http://java.io 包中的一個類。 是對磁盤上的某一個文件、文件夾(目錄)的描述。 所謂的文件操作, 其實都是需要使用這個類來完成的。

4.2. File類的構造方法

import java.io.File;

/**
 * @Description File類的構造方法
 */
public class Program {
    public static void main(String[] args) {
        // 1. File(String pathname)
        //   如果這個路徑下的文件不存在,不影響File對象的實例化。
        File file = new File("C:\\Users\\luds\\Desktop\\dis_hash.png");
        System.out.println(file.exists());

        // 2. File(String parent, String child)
        //    在這個構造方法中,會將parent與child合併在一起
        File file1 = new File("C:\\Users\\luds\\Desktop", "dis_hash.png");
        System.out.println(file1);
        System.out.println(file1.exists());

        // 3. File(File parent, String child)
        //    在構造方法中,將parent的路徑和child進行拼接,得到一個新的路徑
        File desktop = new File("C:\\Users\\luds\\Desktop");
        File file2 = new File(desktop, "dis_hash.png");
        System.out.println(file2);
        System.out.println(file2.exists());
    }
}

4.3. File類的常用的方法

4.3.1. 文件屬性獲取方法

import java.io.File;
import java.util.Date;

/**
 * @Description File類中的常用的方法
 */
public class FileOperation {
    public static void main(String[] args) {
        // 實例化一個對象
        File file = new File("src\\day24\\cFiles\\FileOperation.java");

        // 1. 判斷一個File對象指向的路徑上是否有文件或者文件夾
        System.out.println("exists = " + file.exists());
        // 2. 判斷一個File對象指向的路徑上是否是一個文件
        System.out.println("isFile = " + file.isFile());
        // 3. 判斷一個File對象指向的路徑上是否是一個目錄
        System.out.println("isDir = " + file.isDirectory());
        // 4. 獲取一個文件的大小(注:只能獲取文件的大小,不能獲取文件夾的大小)
        System.out.println("length = " + file.length());
        // 5. 判斷一個文件(目錄)是否是隱藏的
        System.out.println("hidden = " + file.isHidden());
        // 6. 判斷文件(目錄)的權限
        System.out.println("read = " + file.canRead());         // 可讀權限
        System.out.println("write = " + file.canWrite());       // 可寫權限
        System.out.println("execute = " + file.canExecute());   // 可執行權限
        // 7. 獲取文件的名字
        System.out.println("name = " + file.getName());
        // 8. 獲取文件的路徑
        System.out.println("path = " + file.getPath());                 // 相對路徑
        System.out.println("absolutePath = " + file.getAbsolutePath()); // 絕對路徑
        // 9. 獲取父級文件夾的路徑(字符串)
        System.out.println("parent = " + file.getParent());
        // 10. 獲取父級文件夾(File對象)
        System.out.println("parentFile = " + file.getParentFile());
        // 11. 獲取文件上次修改的時間(時間戳)
        System.out.println("lastModified = " + file.lastModified());
        System.out.println(new Date(file.lastModified()));
    }
}

4.3.2. 文件操作方法

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

/**
 * @Description 文件的操作
 */
public class FileOperation2 {
    public static void main(String[] args) {
        // 實例化一個File對象
        File file = new File("C:\\Users\\luds\\Desktop\\abc\\a\\b\\c");

        try {
            // 1. 創建文件
            boolean flag = file.createNewFile();
            System.out.println(flag);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 2. 創建文件夾(只能創建一級文件夾)
        boolean flag = file.mkdir();
        System.out.println(flag);

        // 3. 創建文件夾(創建多級文件夾)
        boolean flag = file.mkdirs();
        System.out.println(flag);

        // 4. 刪除文件(目錄)(可以刪除文件,也可以刪除空文件夾)
        //    謹慎使用: 這個方法,可以將文件直接從磁盤刪除,不經過回收站。沒有撤銷的餘地。
        boolean flag = file.delete();
        System.out.println(flag);

        // 5. 文件的重命名
        File src = new File("C:\\Users\\luds\\Desktop\\abc");
        File dst = new File("C:\\Users\\luds\\Desktop\\ABC");
        System.out.println(src.renameTo(dst));
        // 5.1. 藉助重命名,實現文件的移動
        File src1 = new File("C:\\Users\\luds\\Desktop\\DIS_HASH.png");
        File dst1 = new File("C:\\Users\\luds\\Desktop\\ABC\\dis_hash.png");
        System.out.println(src1.renameTo(dst1));
    }
}

4.3.3. 子文件獲取

import java.io.File;

/**
 * @Description 獲取某一個目錄下的所有的內容
 */
public class FileOperation4 {
    public static void main(String[] args) {
        // 實例化一個File對象
        File file = new File("C:\\Users\\luds\\Desktop");
        // 1. 列舉一個目錄下所有的子文件的名字
        String[] names = file.list();
        for (String name : names) {
            System.out.println(name);
        }

        // 2. 列舉一個目錄下所有的子文件的名字
        //    帶有過濾信息的。
        String[] names1 = file.list((f, name) -> {
            // f: 父級文件夾的File對象
            // name: 子文件的名字
            // 返回值: 如果是true,將會在結果的數組中展示
            return name.startsWith(".");
        });
        for (String s : names1) {
            System.out.println(s);
        }

        // 3. 列舉一個目錄下所有的子文件(以File對象的方式)
        File[] files = file.listFiles();
        for (File file1 : files) {
            System.out.println(file1);
        }

        // 4. 列舉一個目錄下所有的滿足指定條件的子文件
        File[] files1 = file.listFiles(File::isHidden);
        for (File file1 : files1) {
            System.out.println(file1);
        }

        // 5. 舉一個目錄下所有的滿足指定條件的子文件
        File[] files2 = file.listFiles((f, n) -> new File(f, n).isHidden());
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章