Java之IO流
阿新 • • 發佈:2022-02-15
流的概念:
在程式的開發中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();
}
}
}