1. 程式人生 > 其它 >Java之IO流

Java之IO流

流的概念:

在程式的開發中IO的核心就是:輸入和輸出。

輸入和輸出是相對的,可能來自不同的環境。

對於伺服器或者是客戶端而言,傳遞的就是一種資料流的處理形式,而所謂的資料流指的就是位元組資料。

這種的處理形式在java.io包裡提供了兩類支援:

  -位元組處理流:OutputStream(輸出位元組流)、InputStream(輸入位元組流)

  -字元處理流:Writer(輸出字元流)、Reader(輸入字元流)

所有的流操作都應該統一步驟,以檔案處理的流程為例:

  - 進行檔案的讀寫操作,通過File類找到檔案路徑;

  - 通過位元組流或字元流的子類為父類例項化;

  - 利用位元組流或字元流中的方法實現資料的輸入與輸出;

  - 流的操作屬於資源操作,而資源的操作必須進行關閉;

OutputStream抽象類:

NO 方法名稱 型別 作用
1
public abstract void write(int b) throws IOException;
普通 輸出單個位元組資料
2
public void write(byte[ b) throws IOException; // 用得最多
普通 輸出一組位元組資料
3
public void write(byte[] b, int off, int len) throws IOException;
普通 輸出部分資料

要想使用OutputStream抽象類,就需要使用它的子類去向上轉型。

關注的核心在子類FileOutputStream的構造方法上:

【覆蓋】構造方法:public FileOutputStream(File file) throws FileNotFoundException;  // 每次執行程式新的內容都會覆蓋舊的內容
OutputStream output = new FileOutputStream(file);
【追加】構造方法:public FileOutputStream(File file, boolean append) throws FileNotFoundException;  // 執行程式後在舊的內容後新增新的內容
OutputStream output = new FileOutputStream(file,true);

使用OutputStream類實現內容的輸出:

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;

public class MAIN {
    public static void main(String[] args) throws Exception {
        File file = new File("D:" + File.separator + "Demo_2_15" + File.separator + "OutputStream.txt");    // 指定操作檔案的路徑
        if (!file.getParentFile().exists()){    // 如果檔案父路徑不存在
            file.getParentFile().mkdirs();  // 建立父路徑
        }
        OutputStream output = new FileOutputStream(file);   // 子類例項化,覆蓋型別的構造方法
        String str = "www.baidu.com";   // 輸出的內容
        output.write(str.getBytes(StandardCharsets.UTF_8)); // 將字串轉換為位元組陣列
        output.close(); // 關閉資源
    }
}
import java.io.*;
import java.nio.charset.StandardCharsets;

public class MAIN {
    public static void main(String[] args) {
        File file = new File("D:" + File.separator + "Demo_2_15" + File.separator + "OutputStream.txt");    // 指定操作檔案的路徑
        if (!file.getParentFile().exists()){    // 如果檔案父路徑不存在
            file.getParentFile().mkdirs();  // 建立父路徑
        }

        try (OutputStream output = new FileOutputStream(file,true)){   // 子類例項化,追加型別的構造方法
            String str = "www.baidu.com1";   // 輸出的內容
            output.write(str.getBytes(StandardCharsets.UTF_8)); // 將字串轉換為位元組陣列
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

程式採用了標準的形式實現了輸出的操作處理,並且在整體的處理之中,只是建立了檔案的父目錄,但是並沒有建立檔案,而在執行後發現檔案自動完成了建立。

由於OutputStream的子類也屬於AutoCloseable介面的子類,所以對於close()方法也可以簡化使用。

import java.io.*;
import java.nio.charset.StandardCharsets;

public class MAIN {
    public static void main(String[] args) {
        File file = new File("D:" + File.separator + "Demo_2_15" + File.separator + "OutputStream.txt");    // 指定操作檔案的路徑
        if (!file.getParentFile().exists()){    // 如果檔案父路徑不存在
            file.getParentFile().mkdirs();  // 建立父路徑
        }

        try (OutputStream output = new FileOutputStream(file)){   // 子類例項化
            String str = "www.baidu.com1";   // 輸出的內容
            output.write(str.getBytes(StandardCharsets.UTF_8)); // 將字串轉換為位元組陣列
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}