java之 File類 & 字節流(byte)


0x01、File類

File類主要用於文件和目錄創建、查找、刪除等操作的。

1、file類的構造方法

public File(String pathname) :通過將給定的路徑名字符串轉換為抽象路徑名來創建新的 File實例。
public File(String parent, String child) :從父路徑名字符串和子路徑名字符串創建新的 File實例。
public File(File parent, String child) :從父抽象路徑名和子路徑名字符串創建新的 File實例。

2、常用方法:

public String getAbsolutePath() :返回此File的絕對路徑名字符串。
public String getPath() :		 將此File轉換為路徑名字符串。
public String getName() :		 返回由此File表示的文件或目錄的名稱。
public long length() :			 返回由此File表示的文件的長度。

代碼示例:

public static void main(String[] args) {
        String Pathname = "C:\\Users\\86183\\Desktop\\a.txt";
        File abc = new File(Pathname);
        System.out.println(abc.getAbsolutePath());
    
        String Pathname1 = "C:\\Users\\86183\\Desktop\\a.txt";
        File abc1 = new File(Pathname1);
        System.out.println(abc1.getAbsolutePath());
        System.out.println(abc1.getPath());
        System.out.println(abc1.length());
}

3、判斷方法

public boolean exists() :     此File表示的文件或目錄是否實際存在。
public boolean isDirectory() :此File表示的是否為目錄。
public boolean isFile() :     此File表示的是否為文件。

代碼示例:

public static void main(String[] args) {
    String Pathname = "C:\\Users\\86183\\Desktop\\artifact.exe";
    File abc = new File(Pathname);
    boolean a = abc.exists();
    System.out.println(a);
    System.out.println(abc.isFile());
    System.out.println(abc.isDirectory());

}

4、增刪功能方法

public boolean createNewFile() :當前僅當具有該名稱的文件尚不存在時,創建一個新的空文件。
public boolean delete() :刪除由此File表示的文件或目錄。
public boolean mkdir() :創建由此File表示的目錄。
public boolean mkdirs() :創建由此File表示的目錄,包括任何必需但不存在的父目錄。
public static void main(String[] args) throws IOException {
        String Pathname = "a.txt";
        File abc = new File(Pathname);
        boolean file = abc.createNewFile();
        System.out.println(file+"\n"+abc.getAbsolutePath());


       File abc1 = new File("abc");
       abc1.mkdir();

       File abc2 = new File("abc\\abc");
       abc2.mkdirs();
    }

如果是對目錄進行刪除,刪除的目錄必須為空才能進行刪除。

5、目錄遍歷

在file里面給我們提供了,可以直接獲取file目錄下面所有子文件或目錄。

public String[] list() :返回一個String數組,表示該File目錄中的所有子文件或目錄。
public File[] listFiles() :返回一個File數組,表示該File目錄中的所有的子文件或目錄。
public static void main(String[] args) throws IOException {
        String Pathname = "../";
        File abc = new File(Pathname);
        String[] name = abc.list();
        for (String s : name) {
            System.out.println(s);
        }
    }

使用list方法獲取所有文件,然后使用增強for循環進行遍歷。

0x02、字節流

  • I : Input 輸入 從其他存儲設備讀數據到內存中就是輸入
  • O : Output 輸出 從內存中寫數據到其他存儲設備

根據數據的流向分為:輸入流輸出流

  • 輸入流 :把數據從其他設備上讀取到內存中的流。

    • 字節輸入流:以字節為基本單位,讀數據
    • 字符輸入流:以字符為基本單位,讀數據
  • 輸出流 :把數據從內存 中寫出到其他設備上的流。

    • 字節輸出流:以字節為基本單位,寫出數據

    • 字符輸出流:以字符為基本單位,寫出數據

1、字節輸出流

OutputStream抽象類是字節輸入流的超類,他定義了幾個共性的方法。

public void close():關閉此輸出流並釋放與此流相關聯的任何系統資源。    
public void write(byte[] b):將 b.length字節從指定的字節數組寫入此輸出流。  
public void write(byte[] b, int off, int len) :從指定的字節數組寫入 len字節,從偏移量 off開始輸出到此輸出流。  
public abstract void write(int b) :將指定的字節輸出流。

close方法,當完成流的操作時,必須調用此方法,釋放系統資源。

(1)、FileOutputStream類

FileOutputStream類是文件輸出流,用於將數據些出到文件當中。

查看構造方法:

public FileOutputStream(File file) :創建文件輸出流以寫入由指定的 File對象表示的文件。
public FileOutputStream(String name) : 創建文件輸出流以指定的名稱寫入文件。

​ 如果創建一個io流的對象,必須傳入文件的路徑,,如果沒有該文件就會創建該文件,如果有就會清空原本有的數據。

代碼:

public static void main(String[] args) throws IOException {
        File file = new File("a.txt");
        FileOutputStream FileoutDate = new FileOutputStream(file);
        FileoutDate.write(97);
        FileoutDate.close();
    }

​ 這里寫進入一個97,但是打開文件會發現寫進入的變成了a,這是因為我們這里是以byte形式進行寫入的,,而97的ascii轉換為字符后,就是a這個字符。

​ 這里還可以指定寫出的數據長度

Public class FileOutput {
    public static void main(String[] args) throws IOException {
        File file = new File("a.txt");
        FileOutputStream FileoutDate = new FileOutputStream(file);
        byte[] b = "abce3".getBytes();
        FileoutDate.write(b,2,2);
        FileoutDate.close();
    }
 }

這里要先獲取字符的字節類型數據,使用write寫入,從第二位開始索引,寫入2個字節。

在程序開發中,有些數據可能沒法一次執行獲取所有結果,這時候我們如果以上面的方式來循環寫入運行結果的話,每次循環就都會被清空一次,只獲得最后一次的執行結果。那么這時候我們就可以使用到追加,把它追加進入,而不是直接覆蓋重寫。

public FileOutputStream(File file, boolean append) : 創建文件輸出流以寫入由指定的 File對象表示的
文件。
public FileOutputStream(String name, boolean append) : 創建文件輸出流以指定的名稱寫入文件。

代碼

 public static void main(String[] args) throws IOException {
        File file = new File("a.txt");
        FileOutputStream FileoutDate = new FileOutputStream(file,true);
        byte[] b = "abce3".getBytes();
        FileoutDate.write(b,2,2);
        FileoutDate.close();
    }

幾行代碼和前面的相同,只是在FileOutputStream 構造方法里面傳入一個ture,表示使用追加模式,該模式默認為false。

2、字節輸入流

InputStream抽象類是字節輸入流的超類。可以讀取字節數據到內存中。

public void close() :關閉此輸入流並釋放與此流相關聯的任何系統資源。
public abstract int read() : 從輸入流讀取數據的下一個字節。
public int read(byte[] b) : 從輸入流中讀取一些字節數,並將它們存儲到字節數組 b中 。

(1)、FileInputStream 類

​ FileInputStream是文件輸入流,從文件中讀取字節到內存中。

​ 構造方法:

FileInputStream(File file) : 通過打開與實際文件的連接來創建一個 FileInputStream ,該文件由文件系
統中的 File對象 file命名。

FileInputStream(String name) : 通過打開與實際文件的連接來創建一個 FileInputStream ,該文件由文件
系統中的路徑名 name命名。

代碼:

 public static void main(String[] args) throws IOException {
        File file = new File("a.txt");
        FileInputStream fileinputdata = new FileInputStream(file);
        int read = fileinputdata.read();
        System.out.println((char) read);
        read = fileinputdata.read();
        System.out.println((char) read);
        read = fileinputdata.read();
        System.out.println(read);
        fileinputdata.close();
    }

使用read方法讀取完后,地址會往后推一位,知道讀取到沒有,會返回-1。

以上的方法都是讀取單個字節,我們可以定義一個字節類型的數值,然后讓他每次讀取我們指定的長度。

代碼:

  public static void main(String[] args) throws IOException {
        File file = new File("a.txt");
        FileInputStream fileinputdata = new FileInputStream(file);
        int len;
        byte[] b = new byte[2];
        while ((len=fileinputdata.read(b))!=-1){
            System.out.println(new String(b,0,len));
        }
        fileinputdata.close();
    }

這里定義了b變量用來接收每次讀取的數據產的長度,然后定義一個len變量,接收每次讀取的數據,這里可以直接把賦值放在循環條件里面,如果賦值的變量不等於-1,就一直循環,知道讀取到-1,停止循環,前面說到如果沒有數據讀取會輸出返回一個-1,結束循環。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM