1. 程式人生 > 其它 >java 基礎 (IO 流 File 類)

java 基礎 (IO 流 File 類)

  1. java.io.File類: 檔案和檔案目6徑的抽象表示形式,與平臺無關
  2. File 能新建、刪除、重新命名檔案和目錄,但 File 不能訪問檔案內容本身。如果
    需要訪問檔案內容本身,則需要使用輸入/輸出流。
  3. 想要在 Java 程式中表示一個真實存在的檔案或目錄,那麼必須有一個 File 物件,但是 Java 程式中的一個 File 物件,可能沒有一個真實存在的檔案或目錄。
  4. File物件可以作為引數傳遞給流的構造器
* public File(String pathname)
以 pathname 為路徑建立 File物件,可以是絕對路徑或者相對路徑,如果 pathname 是相對路徑,則預設的當前路徑在系統屬性 user.dir 中儲存。
      - 絕對路徑: 是一個固定的路徑,從碟符開始
      - 相對路徑: 是相對於某個位置開始

* public File(String parent,String child)
    以 parent 為父路徑,child 為子路徑建立 File 物件。

* public File(File parent,String child)
    根據一個父File物件和子檔案路徑建立File物件
* 路徑中的每級目錄之間用一個路徑分隔符隔開。
* 路徑分隔符和系統有關:
  - windows 和 DOS 系統預設使用 “\” 來表示
  - UNIX 和 URL 使用 “/” 來表示
* Java 程式支援跨平臺執行,因此路徑分隔符要慎用。
* 為了解決這個隱患,File 類提供了一個常量:
  public static final String separator。根據作業系統,動態的提供分隔符。
* File 類的建立功能
- public boolean createNewFile(): 建立檔案。若檔案存在,則不建立,返回false
- public boolean mkdir(): 建立檔案目錄。如果此檔案目錄存在,就不建立了。如果此檔案目錄的上層目錄不存在,也不建立。
- public boolean mkdirs(): 建立檔案目錄。如果上層檔案目錄不存在,一併建立

注意事項: 如果你建立檔案或者檔案目錄沒有寫碟符路徑,那麼,預設在專案路徑下。

* File 類的刪除功能
public boolean delete(): 刪除檔案或者資料夾
刪除注意事項:
Java 中的刪除不走回收站。
要刪除一個檔案目錄,請注意該檔案目錄內不能包含檔案或者檔案目錄

File類的使用
1. File 類的一個物件,代表一個檔案或一個檔案目錄(俗稱:資料夾)
2. FiLe 類宣告在 java.io 包下
3. Fil 類中涉及到關於檔案或檔案目錄的建立、刪除、重新命名、修改時間、檔案大小等方法,
   並來涉及到寫入或讀取檔案內容的操作。如果需要讀取或寫入檔案內容,必須使用 IO 流來完成。

FileTest.java

package com.klvchen.java3;

import org.junit.Test;

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

public class FileTest {

    @Test
    public void test1(){
        //構造器1
        File file1 = new File("hello.txt");//相當於當前 module
        File file2 = new File("G:\\java_course\\day08\\he.txt");

        System.out.println(file1);
        System.out.println(file2);

        // 構造器2
        File file3 = new File("G:\\tmp", "javaSenior");
        System.out.println(file3);

        // 構造器3
        File file4 = new File(file3, "hi.txt");
        System.out.println(file4);

    }

    /*
    public string getAbsolutePath():獲取絕對路徑public string getPath():獲取路徑
    public string getName():獲取名稱
    public string getParent():獲取上層檔案目錄路徑。若無,返回null
    public Long length():獲取檔案長度(即:位元組數)。不能獲取目錄的長度。public long lastModified():獲取最後一次的修改時間,毫秒值
    public string[ ] list():獲取指定目錄下的所有檔案或者檔案目錄的名稱陣列public File[] listFiles():獲取指定目錄下的所有檔案或者檔案目錄的File陣列
    */

    @Test
    public void test2(){
        File file1 = new File("hello.txt");
        File file2 = new File("G:\\tmp\\hi.txt");

        System.out.println(file1.getAbsoluteFile());
        System.out.println(file1.getPath());
        System.out.println(file1.getName());
        System.out.println(file1.getParent());
        System.out.println(file1.length());
        System.out.println(file1.lastModified());

        System.out.println();

        System.out.println(file2.getAbsoluteFile());
        System.out.println(file2.getPath());
        System.out.println(file2.getName());
        System.out.println(file2.getParent());
        System.out.println(file2.length());
        System.out.println(file2.lastModified());

    }

    @Test
    public void test3(){
        File file = new File("G:\\java_course");

        String[] list = file.list();
        for (String s : list) {
            System.out.println(s);
        }

        System.out.println();

        File[] files = file.listFiles();
        for (File f : files) {
            System.out.println(f);
        }
    }

    /*
        public boolean renameTo(File dest):把檔案重新命名為指定的檔案路徑
        比如:file1.renameTo(file2)為例:
          要想保證返回true,需要file1在硬碟中是存在的,且fiLe2不能在硬碟中存在。

         */
    @Test
    public void test4(){
        File file1 = new File("hello.txt");
        File file2 = new File("G:\\tmp\\hi.txt");

        boolean renameTo = file1.renameTo(file2);
        System.out.println(renameTo);
    }

    /*
    public booLean isDirectory():判斷是否是檔案目錄
    public boolean isFile() :判斷是否是檔案
    public booLean exists() :判斷是否存在
    public booLean canRead() :判斷是否可讀
    public boolean canwrite() :判斷是否可寫
    public boolean isHidden() :判斷是否隱藏

     */

    @Test
    public void test5(){
        File file1 = new File("hello.txt");
        file1 = new File("hello1.txt");

        System.out.println(file1.isDirectory());
        System.out.println(file1.isFile());
        System.out.println(file1.exists());
        System.out.println(file1.canRead());
        System.out.println(file1.canWrite());
        System.out.println(file1.isHidden());

        System.out.println();

        File file2 = new File("G:\\tmp");
        System.out.println(file2.isDirectory());
        System.out.println(file2.isFile());
        System.out.println(file2.exists());
        System.out.println(file2.canRead());
        System.out.println(file2.canWrite());
        System.out.println(file2.isHidden());
    }

    @Test
    public void test6() throws IOException {
        File file1 = new File("hi.txt");
        if (!file1.exists()) {
            file1.createNewFile();
            System.out.println("建立成功");
        } else {
            file1.delete();
            System.out.println("刪除成功");
        }
    }

    @Test
    public void test7(){
        //檔案目錄的建立
        File file1 = new File("G:\\tmp\\io1");

        boolean mkdir = file1.mkdir();
        if (mkdir) {
            System.out.println("建立成功1");
        }

        File file2 = new File("G:\\tmp\\io2");

        boolean mkdir1 = file2.mkdir();
        if (mkdir1) {
            System.out.println("建立成功2");
        }

    }


}