Java中對IO流的全面解析
一.IO流的類別
IO流分為字符流和字節(jié)流兩種:
字符流:一般指文本,我們能讀的懂的都可以認為是字符流。比如:文章,java文件等等。
字節(jié)流:指二進制的數(shù)據(jù),這種數(shù)據(jù)一般用文本打開我們讀不懂。比如圖片文件,mp3文件等等。

二.字符流
字符流適合處理文本文件,支持字符編碼,能夠高效地讀寫文本數(shù)據(jù)。
字符輸入流(Reader)用于讀取文本數(shù)據(jù),常用類包括 FileReader 和 BufferedReader。
字符輸出流(Writer)用于寫入文本數(shù)據(jù),常用類包括 FileWriter 和 BufferedWriter。
1.字符輸入流
字符輸入流用于從數(shù)據(jù)源(如文件、字符串等)讀取字符數(shù)據(jù)。Reader 是所有字符輸入流的抽象基類。
FileReader :用于從文件中讀取字符數(shù)據(jù)。
InputStreamReader:將字節(jié)流轉(zhuǎn)換為字符流,可以指定字符編碼。
BufferedReader:提供緩沖功能,提高讀取效率,支持按行讀取。
import java.io.*;
public class Main {
public static void main(String[] args) {
// 使用 FileReader 讀取文件
try (FileReader reader = new FileReader("D:\\a.txt")) {
int data;
while ((data = reader.read()) != -1) {
System.out.print((char) data); // 逐個字符讀取
}
} catch (IOException e) {
e.printStackTrace();
}
// 使用 InputStreamReader 讀取文件
try (InputStreamReader reader = new InputStreamReader(new FileInputStream("D:\\a.txt"), "UTF-8")) {
int data;
while ((data = reader.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
// 使用 BufferedReader 按行讀取文件
try (BufferedReader br = new BufferedReader(new FileReader("D:\\a.txt"))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line); // 逐行讀取
}
} catch (IOException e) {
e.printStackTrace();
}
}
}2.字符輸出流
字符輸出流用于將字符數(shù)據(jù)寫入目標(如文件、控制臺等)。Writer 是所有字符輸出流的抽象基類。
FileWriter:用于將字符數(shù)據(jù)寫入文件。
OutputStreamWriter:將字符流轉(zhuǎn)換為字節(jié)流,可以指定字符編碼。
BufferedWriter:提供緩沖功能,提高寫入效率,支持按行寫入。
import java.io.*;
public class Main {
public static void main(String[] args) {
// 使用 FileWriter 寫入文件
try{
FileWriter writer = new FileWriter("output.txt");
writer.write("Hello, World!"); // 寫入字符串
writer.write("\nThis is a new line."); // 寫入換行符
writer.close(); //這個很重要沒有這個數(shù)據(jù)寫入不進去
} catch (IOException e) {
e.printStackTrace();
}
try {
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("output.txt"));
writer.write("Hello, World!"); // 寫入字符串
writer.write("\nThis is a new line."); // 寫入換行符
writer.close(); //這個很重要沒有這個數(shù)據(jù)寫入不進去
}catch (IOException e){
e.printStackTrace();
}
// 使用 BufferedWriter 按行寫入文件
try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
bw.write("Hello, World!"); // 寫入字符串
bw.newLine(); // 寫入換行符
bw.write("This is a new line."); // 寫入另一行
} catch (IOException e) {
e.printStackTrace();
}
}
}一定要注意寫上writer.close();
3.Writer常用的五種寫入方法
(1)write(int c)
功能:寫入單個字符。
參數(shù):c 是要寫入的字符(以 int 形式表示,低 16 位有效)。
(2)write(char[] cbuf)
功能:寫入字符數(shù)組中的所有字符
參數(shù):cbuf 是要寫入的字符數(shù)組。
(3)write(char[] cbuf, int off, int len)
功能:寫入字符數(shù)組的一部分。
參數(shù):cbuf:字符數(shù)組。
off:起始偏移量(從數(shù)組的哪個位置開始寫入)。
len:要寫入的字符數(shù)。
(4)write(String str)
功能:寫入字符串。
參數(shù):str 是要寫入的字符串。
(5)write(String str, int off, int len)
功能:寫入字符串的一部分。
參數(shù):str:字符串。
off:起始偏移量(從字符串的哪個位置開始寫入)。
len:要寫入的字符數(shù)。
// 1. 寫入單個字符
writer.write('H');
// 2. 寫入字符數(shù)組
char[] array = {'e', 'l', 'l', 'o'};
writer.write(array);
// 3. 寫入字符數(shù)組的一部分
writer.write(array, 1, 2); // 寫入 "ll"
// 4. 寫入字符串
writer.write(", World!");
// 5. 寫入字符串的一部分
String str = "\nThis is Java IO.";
writer.write(str, 0, 11); // 寫入 "This is Java"三.字節(jié)流
1.字節(jié)輸入流
InputStream 是所有字節(jié)輸入流的抽象基類,它定義了讀取字節(jié)數(shù)據(jù)的基本方法。
FileInputStream(File file): 通過打開與實際文件的連接來創(chuàng)建一個 FileInputStream ,該文件由文件系統(tǒng)中的 File對象 file命名。
FileInputStream(String name): 通過打開與實際文件的連接來創(chuàng)建一個 FileInputStream ,該文件由文件系統(tǒng)中的路徑名 name命名。
常用方法:(1)int read():從輸入流中讀取一個字節(jié)的數(shù)據(jù),返回值為讀取的字節(jié)(范圍是 0 - 255),如果到達流的末尾則返回 -1。
(2)int read(byte[] b):從輸入流中讀取一定數(shù)量的字節(jié),并將其存儲在緩沖區(qū)數(shù)組 b 中,返回實際讀取的字節(jié)數(shù),如果到達流的末尾則返回 -1。
(3)int read(byte[] b, int off, int len):從輸入流中讀取最多 len 個字節(jié)的數(shù)據(jù),并將其存儲在數(shù)組 b 中,從偏移量 off 開始存儲,返回實際讀取的字節(jié)數(shù),如果到達流的末尾則返回 -1。
(4)void close():關(guān)閉此輸入流并釋放與之關(guān)聯(lián)的所有系統(tǒng)資源。
import java.io.*;
public class FileInputStreamTest {
public static void main(String[] args) {
//定義輸入流
FileInputStream fis =null;
try {
//1、創(chuàng)建文件對象
File file = new File("D:\\IO\\hello.txt");
//2、創(chuàng)建輸入流對象
fis = new FileInputStream(file);
//用定義字節(jié)數(shù)組,作為裝字節(jié)數(shù)據(jù)的容器
byte[] buffer =new byte[5];
int len;//記錄每次讀取的字節(jié)個數(shù)
System.out.println(fis.read(buffer));
while ((len=fis.read(buffer))!=-1){
//轉(zhuǎn)成String型,否則輸出ASCII碼
String str=new String(buffer,0,len);
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//釋放資源
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}2.字節(jié)輸出流
OutputStream是所有字節(jié)輸出流的父類,定義了所有字節(jié)輸出流都具有的共同特征。
FileOutputStream(File file):創(chuàng)建文件輸出流以寫入由指定的 File對象表示的文件。
FileOutputStream(String name): 創(chuàng)建文件輸出流以指定的名稱寫入文件。
FileOutputStream(String name,boolean append): 創(chuàng)建文件輸出流以指定的名稱寫入文件,每次輸出文件是否繼續(xù)拼接。
常用方法:(1)void write(byte b):把一個字節(jié)寫入到文件中。
(2)void write(byte[] b):把數(shù)組b 中的所有字節(jié)寫入到文件中。
(3)void write(byte[] b,int off,int len):把數(shù)組b中的字節(jié)從 off 索引開始的 len 個字節(jié)寫入到文件中。
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileOutputStreamTest {
public static void main (String[] args) {
//定義字節(jié)輸出流
FileOutputStream fos =null;
try {
//1、創(chuàng)建文件對象
File file = new File("D:\\IO\\hello.txt");
//2、創(chuàng)建輸出流對象
fos = new FileOutputStream(file);
fos.write(97);
//后面的 \r\n表示回車換行
fos.write("中國人!\r\n".getBytes());
//從索引2開始輸出4個字節(jié)
fos.write("ABCDEFGH".getBytes(),2,4);
} catch (IOException e) {
e.printStackTrace();
} finally {
//釋放資源
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}到此這篇關(guān)于Java中Map.Entry鍵值對的概念與應(yīng)用實踐的文章就介紹到這了,更多相關(guān)Java中Map.Entry鍵值對內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot項目整合注冊功能模塊開發(fā)實戰(zhàn)
這篇文章主要介紹了springboot項目整合注冊功能模塊開發(fā)實戰(zhàn),在用戶的注冊是首先需要查詢當前的用戶名是否存在,如果存在則不能進行注冊,相當于一個查詢語句,本文通過實例代碼詳細講解,需要的朋友可以參考下2022-11-11
Spring的自定義擴展標簽NamespaceHandler解析
這篇文章主要介紹了Spring的自定義擴展標簽NamespaceHandler解析,在很多情況下,我們需要為系統(tǒng)提供可配置化支持,簡單的做法可以直接基于Spring的標準Bean來配置,Spring提供了可擴展Schema的支持,這是一個不錯的折中方案,需要的朋友可以參考下2023-12-12
Java簡單實現(xiàn)猜數(shù)字游戲附C語言版本
猜數(shù)字是興起于英國的益智類小游戲,起源于20世紀中期,一般由兩個人或多人玩,也可以由一個人和電腦玩。游戲規(guī)則為一方出數(shù)字,一方猜,今天我們來用Java和C語言分別把這個小游戲?qū)懗鰜砭毦毷?/div> 2021-11-11
SpringBoot整合Drools規(guī)則引擎動態(tài)生成業(yè)務(wù)規(guī)則的實現(xiàn)
本文主要介紹了SpringBoot整合Drools規(guī)則引擎動態(tài)生成業(yè)務(wù)規(guī)則的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12最新評論

