首頁 > 軟體

一起來學習Java IO的轉化流

2022-03-22 13:00:51

Java IO 轉化流

亂碼引起轉換流

讀取亂碼

讀取電腦磁碟上的Java.txt檔案內容,檔案路徑: e:JavaJava.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));//建立字元處理流物件
             String s = bufferedReader.readLine();//讀取檔案
             System.out.println(s);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {//關閉處理流
            try {
                if (bufferedReader != null) {
                    bufferedReader.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

執行結果:將檔案內容讀取了出來。

因為程式預設是以 utf-8 編碼讀取的,而此時Java.txt檔案恰好是 utf-8 編碼,所以可以將內容完整的讀取出來。如果改變Java.txt檔案的編碼格式,讀取結果會怎樣呢?

修改Java.txt 檔案的編碼格式為gbk,ANSI為國標碼,根據電腦系統識別,當前電腦系統為gbk編碼,所以將檔案編碼修改為ANSI編碼即可。

再次讀取檔案結果出現亂碼

因為程式預設以utf8編碼格式讀取檔案,而此時檔案編碼為gbk,所以讀取結果會產生亂碼。

如何解決這個問題?我們可以使用 轉換流 來指定輸入流的編碼格式

轉換流介紹

轉換流有 InputStreamReader 和 OutputStreamWriter兩種。

1. InputStreamReader:Reader的子類,可以將InputStream(位元組流)轉換為Reader(字元流)

2. OutputStreamWriter:Writer的子類,可以將OutputStream(位元組流)轉換為Writer (字元流)

3. 當處理純文字資料時,如果使用字元流效率更高,並且可以有效解決中文問題,建議將位元組流轉換成字元流。

4. 可以在使用時指定編碼格式(比如utf8,gbk等)

InputStreamReader

InputStreamReader類繼承關係及建構函式

InputStreamReaderReader的一個子類,它其中的建構函式InputStreamReader(InputStream,Charset)可以將一個位元組輸入流轉換成字元輸入流,同時通過Charset屬性指定字元集編碼。

用轉換流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);
        //將位元組輸入流,轉換為字元流 並指定編碼格式為 utf8
        InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "gbk");
         //將字元流轉換為功能更加強大的字元處理流
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
         //讀取內容
        String s = bufferedReader.readLine();
        System.out.println(s);
         //關閉流
        bufferedReader.close();
    }
}
 

執行結果:

內容讀取成功~~~

OutputStreamWriter

OutputStreamWriter類繼承關係及建構函式

OutputStreamWriterWriter的一個子類,它其中的建構函式OutputStreamWriter(OutputStream,Charset)可以將一個位元組輸出流轉換成字元輸出流,同時通過Charset屬性指定字元集編碼。

程式碼範例:

程式設計將位元組流 FileOutputStream 轉換成字元流OutputStreamWriter,並在電腦磁碟上檔案hello.txt檔案中指定gbk編碼格式寫入“你好,Java!”,檔案路徑: e:Javahello.txt 。

import java.io.*;
 public class OutputSteamWriterTest {
    public static void main(String[] args) throws IOException {
        String filePath = "e:\Java\hello.txt";
         //將位元組輸出流轉換為字元輸出流
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(filePath), "gbk");
         String content = "你好,Java!";
         //將內容寫進檔案
        outputStreamWriter.write(content);
         //關閉流
        outputStreamWriter.close();
         System.out.println("儲存成功~~~");
    }
}

執行結果:

將內容寫進了hello.txt檔案。

總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!


IT145.com E-mail:sddin#qq.com