轉換流:
轉換流提供了在字節流和字符流之間的轉換,用於將字節流的讀入轉換爲字符流的讀入,將字符流的寫出轉換爲字節流的寫出,包括InputStreamReader和OutputStreamWriter,其中:
- InputStreamReader:將InputStream轉換爲Reader,它有兩類構造方法:
- public InputStreamReader(InputStream in) :使用系統默認字符集
- public InputSreamReader(InputStream in,String charsetName):指定字符集
- OutputStreamWriter:將Writer轉換爲OutputStream,它也有兩類構造方法:
- public OutputStreamWriter(OutputStream out) :使用系統默認字符集
- public OutputStreamWriter(OutputStream out,String charsetName):指定字符集
例:將“Hello.txt”文件在控制檯打印出來,並將其以gbk編碼格式存入“Hello-gbk.txt”文件中
package cn.jingpengchong.io;
import java.io.*;
public class Test {
public static void main(String[] args) {
String src = "Hello.txt";
String des = "Hello-gbk.txt";
test(src,des);
}
private static void test(String src, String des) {
//第二個參數爲指定的字符集,如果省略了則使用系統默認的字符集,具體使用何種字符集取決於保存文件時使用的字符集
InputStreamReader reader= null;
OutputStreamWriter writer = null;
try {
reader = new InputStreamReader(new FileInputStream(src),"utf-8");
writer = new OutputStreamWriter(new FileOutputStream(des), "gbk");
char[] data = new char[10];
int read = reader.read(data);
while (read != -1){
String str = new String(data,0,read);
System.out.print(str);
writer.write(data,0,read);
read = reader.read(data);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if(reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(writer != null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
運行結果如下:
此時如果以UTF-8格式打開“Hello-gbk.txt”文件,則會出現亂碼: