JavaWeb~File文件的操作 實現遞歸打印文件目錄列表

IO處理的是什麼?

  • 操作系統對於硬件設備進行了進一步的抽象 把硬件設備都視爲一個一個的文件 也就是一切皆文件思想
  • 而IO操作就是處理的就是這些文件 例如通過網卡傳過來的數據 從網卡中接收數據的操作類似於讀文件 往網卡中發送數據的操作就類似於寫文件
  • 那什麼是文件? 我們日常生活中txt doc exe .java lib mp3 等等都是一些文件
  • 文件簡單理解 在外設硬盤上面保存數據的一種方式
  • 文件一共可以由兩部分構成:屬性(文件大小,文件名,文件類型等)+內容(就是文件裏面放的是什麼)
  • 所以我們學 JavaIO ,學什麼呢?就學對文件的屬性和內容進行操作,而實際寫入或者讀取的過程,我們稱之爲IO

絕對路徑與相對路徑

  • 絕對路徑
    以c: 或者 D: 盤開頭的路徑 就叫做絕對路徑 如 D:\java\test\more
  • 絕對路徑
    必須先指定一個工作目錄 然後用 . 或者 .. 開頭的路徑 表示一個具體的文件位置 相對路徑的參照點就是當前這個工作的目錄(.. 表示從當前目錄的上一級目錄開始找)

例如:
D:\java\test 是絕對路徑 而 .\study.txt 是相對路徑
D:\java\test\more 是絕對路徑 而 ..\study.txt 是相對路徑

  • 當工作目錄發生變化的時候 此時的相對路徑的寫法就會發生變化 但我們下面構造File對象的時候使用相對路徑和絕對路徑都是可以的 具體文件是否存在 需要使用 existi 方法判斷
  • file.getAbsolutePath() 方法獲取File對象的絕對路徑

File類的常用方法

  • 在 java.io 包之中,用 File 類來對文件進行操作(創建、刪除、取得信息等)

File類的準備工作

  • 常用構造方法
  • public File(String pathname) 創建指定路徑文件對象
  • public File(String parent, String child) 同上,但可指明父路徑和子路徑
import java.io.File;

public class IOTest {
    public static void main(String[] args) {
        String path = "D:\\java\\test\\more";
        String pathname = path + "\\moreTest.txt";
        File file = new File(pathname);
    }
}

File類的基本文件操作

  • public boolean exists() 測試指定路徑中文件或者目錄是否存在
  • public boolean isDirectory() 判定一個文件是目錄
  • public boolean isFile() 判定是否是文件
  • public boolean delete() 刪除文件
  • public boolean createNewFile() throws IOException 創建一個新文件
import java.io.File;
import java.io.IOException;

public class IOTest {
    public static void main(String[] args) {
        String path = "D:\\java\\test\\more";
        String pathname = path + "\\moreTest.txt";
        File file = new File(pathname);

        //判斷是否存在
        System.out.print("判斷是否存在");
        System.out.println(file.exists());

        //如果存在就查看是否爲目錄或者文件
        if (file.exists()) {
            //判斷是否目錄
            System.out.println("判斷是否目錄" + file.isDirectory());
            //判斷是否文件
            System.out.println("判斷是否文件" + file.isFile());
        }

        //刪除文件
        System.out.print("刪除文件");
        System.out.println(file.delete());

        if(!file.exists()){
             System.out.println("刪除文件成功!");
        } else {
             System.out.println("刪除文件失敗!");
        }


        //創建文件
        if (! file.exists()) {
            try {
                System.out.print(file.createNewFile());
                System.out.println("創建成功");
            } catch (IOException e) {
                System.out.println("創建失敗");
            }
        } else {
            System.out.println("file存在不需要創建");
        }

        System.out.println("最後file是否存在" + file.exists());
    }
}

在這裏插入圖片描述

File類的目錄操作

  • public boolean mkdir() 創建一個空目錄
  • public boolean mkdirs() 創建目錄(無論有多少級父目錄,都會創建)
  • public String getParent() 取得父路徑
  • public File getParentFile() 取得父File對象
import java.io.File;

public class IOTest2 {

    public static void main(String[] args) {

        String path = "D:\\java\\test\\more";
        //要創建的目錄
        String dir = "\\dir1\\dir2\\dir3";
        String pathname = path + dir;

        File file = new File(pathname);

        System.out.println("file是否存在" +file.exists());
        System.out.println("創建成功"+ file.mkdirs());
        System.out.println("file是否存在" +file.exists());

        System.out.println("獲得父路徑" + file.getParent());

        File filePar = file.getParentFile();
        System.out.println("獲得父對象" + filePar);
    }
}

在這裏插入圖片描述

File類的文件屬性操作

  • public long length() 取得文件大小(字節)
  • public long lastModified() 最後一次修改日期
import javax.xml.crypto.Data;
import java.io.File;
import java.util.Date;

public class IOTest3 {

    public static void main(String[] args) {

        String path = "D:\\java\\test\\more\\";
        String name = "moreTest.txt";

        File file = new File(path + name);

        //獲得文件字節大小 注意返回的是long類型
        System.out.println("moreTest.txt" + "大小爲" + file.length());

        //最近修改時間
        System.out.println("moreTest.txt最近修改時間爲" + new Date(file.lastModified()));
    }
}

在這裏插入圖片描述

File類的其他操作

  • public File[] listFiles() 列出一個目錄指定的全部組成
import java.io.File;

public class IOTest4 {

    public static void main(String[] args) {

        File file = new File("D:\\java");

        File[] files = file.listFiles();

        for (File f : files
             ) {
            System.out.println(f);
        }
    }
}

在這裏插入圖片描述

實現遞歸打印文件目錄列表

  • 雖然File提供有 listFiles() 方法,但是這個方法本身只能夠列出本目錄中的第一級信息。如果要求列出目錄中所有級的信息,必須自己來處理。這種操作就必須通過遞歸的模式來完成。
import java.io.File;

public class IOTest4 {

    public static void main(String[] args) {

        File file = new File("D:\\java");
        listAllFiles(file);

       /* File[] files = file.listFiles();

        for (File f : files
             ) {
            System.out.println(f);
        }*/
    }

    private static void listAllFiles(File file) {

        if (file.isDirectory()) {
            //如果是目錄 就獲得其目錄的所有組成
            File[] files = file.listFiles();

            //遞歸遍歷所有組成
            assert files != null;
            for (File f : files
                 ) {
                listAllFiles(f);
            }
        } else {
            //說明是文件就輸出其路徑
            System.out.println(file);
        }
    }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章