一起來學習Java IO的轉(zhuǎn)化流
Java IO 轉(zhuǎn)化流
亂碼引起轉(zhuǎn)換流
讀取亂碼
讀取電腦磁盤上的Java.txt文件內(nèi)容,文件路徑: e:\Java\Java.txt,文件編碼格式為 utf-8 。

代碼示例:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class TestDemo {
public static void main(String[] args) {
BufferedReader bufferedReader = null;
String filePath = "e:\\Java\\Java.txt";
try {
bufferedReader = new BufferedReader(new FileReader(filePath));//創(chuàng)建字符處理流對象
String s = bufferedReader.readLine();//讀取文件
System.out.println(s);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {//關(guān)閉處理流
try {
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
運行結(jié)果:將文件內(nèi)容讀取了出來。

因為程序默認是以 utf-8 編碼讀取的,而此時Java.txt文件恰好是 utf-8 編碼,所以可以將內(nèi)容完整的讀取出來。如果改變Java.txt文件的編碼格式,讀取結(jié)果會怎樣呢?
修改Java.txt 文件的編碼格式為gbk,ANSI為國標碼,根據(jù)電腦系統(tǒng)識別,當前電腦系統(tǒng)為gbk編碼,所以將文件編碼修改為ANSI編碼即可。

再次讀取文件結(jié)果出現(xiàn)亂碼
因為程序默認以utf8編碼格式讀取文件,而此時文件編碼為gbk,所以讀取結(jié)果會產(chǎn)生亂碼。

如何解決這個問題?我們可以使用 轉(zhuǎn)換流 來指定輸入流的編碼格式
轉(zhuǎn)換流介紹
轉(zhuǎn)換流有 InputStreamReader 和 OutputStreamWriter兩種。
1. InputStreamReader:Reader的子類,可以將InputStream(字節(jié)流)轉(zhuǎn)換為Reader(字符流)
2. OutputStreamWriter:Writer的子類,可以將OutputStream(字節(jié)流)轉(zhuǎn)換為Writer (字符流)
3. 當處理純文本數(shù)據(jù)時,如果使用字符流效率更高,并且可以有效解決中文問題,建議將字節(jié)流轉(zhuǎn)換成字符流。
4. 可以在使用時指定編碼格式(比如utf8,gbk等)
InputStreamReader
InputStreamReader類繼承關(guān)系及構(gòu)造函數(shù)

InputStreamReader是Reader的一個子類,它其中的構(gòu)造函數(shù)InputStreamReader(InputStream,Charset)可以將一個字節(jié)輸入流轉(zhuǎn)換成字符輸入流,同時通過Charset屬性指定字符集編碼。
用轉(zhuǎn)換流InputStreamReader再次讀取上述示例中Java.txt文件,解決亂碼問題。
代碼示例:
import java.io.*;
public class InputStreamReaderTest {
public static void main(String[] args) throws IOException {
String filePath = "e:\\Java\\Java.txt";
FileInputStream fileInputStream = new FileInputStream(filePath);
//將字節(jié)輸入流,轉(zhuǎn)換為字符流 并指定編碼格式為 utf8
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "gbk");
//將字符流轉(zhuǎn)換為功能更加強大的字符處理流
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//讀取內(nèi)容
String s = bufferedReader.readLine();
System.out.println(s);
//關(guān)閉流
bufferedReader.close();
}
}
運行結(jié)果:
內(nèi)容讀取成功~~~

OutputStreamWriter
OutputStreamWriter類繼承關(guān)系及構(gòu)造函數(shù)

OutputStreamWriter是Writer的一個子類,它其中的構(gòu)造函數(shù)OutputStreamWriter(OutputStream,Charset)可以將一個字節(jié)輸出流轉(zhuǎn)換成字符輸出流,同時通過Charset屬性指定字符集編碼。
代碼示例:
編程將字節(jié)流 FileOutputStream 轉(zhuǎn)換成字符流OutputStreamWriter,并在電腦磁盤上文件hello.txt文件中指定gbk編碼格式寫入“你好,Java!”,文件路徑: e:\Java\hello.txt 。
import java.io.*;
public class OutputSteamWriterTest {
public static void main(String[] args) throws IOException {
String filePath = "e:\\Java\\hello.txt";
//將字節(jié)輸出流轉(zhuǎn)換為字符輸出流
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(filePath), "gbk");
String content = "你好,Java!";
//將內(nèi)容寫進文件
outputStreamWriter.write(content);
//關(guān)閉流
outputStreamWriter.close();
System.out.println("保存成功~~~");
}
}
運行結(jié)果:
將內(nèi)容寫進了hello.txt文件。

總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java面向?qū)ο蠡A(chǔ)知識之委托和lambda
這篇文章主要介紹了Java面向?qū)ο蟮闹泻?lambda,文中有非常詳細的代碼示例,對正在學習java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下2021-11-11
基于MockMvc進行springboot調(diào)試(SpringbootTest)
這篇文章主要介紹了基于MockMvc進行springboot調(diào)試(SpringbootTest),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-10-10
metershpere實現(xiàn)調(diào)用自定義jar包中的方法
在MeterSphere接口測試中,面對多層循環(huán)邏輯和邏輯判斷等復雜情況,直接編寫測試用例往往顯得混亂不便,本文介紹了一個簡化這一過程的方法:首先使用IDEA創(chuàng)建Maven工程,編寫所需邏輯并生成jar包;然后在MeterSphere中上傳此jar包2024-10-10
Spring Boot Admin的使用詳解(Actuator監(jiān)控接口)
這篇文章主要介紹了Spring Boot Admin的使用詳解(Actuator監(jiān)控接口),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-05-05
springcloud項目占用內(nèi)存好幾個G導致服務(wù)器崩潰的問題
這篇文章主要介紹了springcloud項目占用內(nèi)存好幾個G導致服務(wù)器崩潰的問題,本文給大家分享解決方案供大家參考,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
SpringBoot傳遞單一參數(shù)時@RequestParam和@RequestBody的區(qū)別小結(jié)
用SpringBoot框架做項目時,經(jīng)常需要前端給后端傳遞參數(shù),本文主要介紹了SpringBoot傳遞單一參數(shù)時@RequestParam和@RequestBody的區(qū)別,具有一定的參考價值,感興趣的可以了解一下2023-08-08
SpringBoot Admin升級boot等組件版本后無法監(jiān)控微服務(wù)問題
這篇文章主要介紹了SpringBoot Admin升級boot等組件版本后無法監(jiān)控微服務(wù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Spark學習筆記 (二)Spark2.3 HA集群的分布式安裝圖文詳解
這篇文章主要介紹了Spark2.3 HA集群的分布式安裝,結(jié)合圖文與實例形式詳細分析了Spark2.3 HA集群分布式安裝具體下載、安裝、配置、啟動及執(zhí)行spark程序等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02

