【转换流】
OutputStreamWriter
| --- FileWriter
InputStreamReader
| --- FileReader
【OutputStreamWriter转换流】字符转字节
| -- FileWriter (不能设定编码表,为系统默认的)
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
/*
* 转换流 java.io.OutputStreamWriter 继承Writer类
* 就是一个字符输出流,用来写文本文件
* 方法:write() 参数:字符char、字符数组char[] c、字符串 String
* 字符 流向 字节 的桥梁, 可以将 字符流 转换成 字节流
* OutputStreamWriter 使用方式:
* 构造方法:
* OutputStreamWriter(OutputStream out) 接受所有的字节输出流 如 FileOutputStream
* OutputStreamWriter(OutputStream out, String charsetName)
* String charsetName 传递编码表的名字 GBK UTF-8 (不区分大小写)
*
* OutputStreamWriter 有个子类FileWriter 不能更改编码表(为系统默认)
*/
public class OutputStreamWriterDemo1 {
public static void main(String[] args) throws IOException {
//writeGBK();
writeUTF();
}
// 1. 转换流对象OutputStreamWriter 写文本 文本采用GBK形式写入
public static void writeGBK() throws IOException{
// 创建字节输出流,绑定数据文件
FileOutputStream fos = new FileOutputStream("E:\\workspace\\Demo\\gbk.txt");
// 创建转换流对象,在构造方法中 绑定字节输出流对象,使用GBK编码表
OutputStreamWriter osw = new OutputStreamWriter(fos,"GBK"); // "GBK"默认可以不写
// 转换流写数据
osw.write("你好啊");
osw.close(); // "你好啊"在文件中是6个字节 GBK编码表中一个汉字用2个字节表示
}
// 2. 转换流对象OutputStreamWriter 写文本 文本采用UTF-8形式写入
public static void writeUTF() throws IOException{
// 创建字节输出流,绑定数据文件
FileOutputStream fos = new FileOutputStream("E:\\workspace\\Demo\\utf.txt");
// 创建转换流对象,在构造方法中 绑定字节输出流对象,使用UTF-8编码表
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
// 转换流写数据
osw.write("你好啊");
osw.close(); // "你好啊"在文件中是9个字节 UTF编码表中一个汉字用3个字节表示
}
}
【InputStreamReader转换流】字节转字符
| -- FileReader (不能设定编码表,为系统默认的)
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
/*
* 转换流,java.io.InputStreamReader 继承Reader类
* 字符输入流,读取文本文件
* 字节流向字符的桥梁,将字节流转化为字符流
* 读取方法:read() 读取一个字符,读取字符数组
* InputStreamReader 使用方式:
* 构造方法:
* InputStreamReader(InputStream in) 接受所有字节输入流,如FileInputStream
* InputStreamReader(InputStream in, String charsetName)
* String charsetName 传递编码表的名字 GBK UTF-8 (不区分大小写)
*
*/
public class InputStreamReaderDemo1 {
public static void main(String[] args) throws IOException{
function_1();
}
// 1.转换流 InputStreamReader对象 采用GBK(系统默认编码表)编码表 ,读取文本,
public static void function_1() throws IOException{
// 创建字节输入流对象
FileInputStream fis = new FileInputStream("E:\\workspace\\Demo\\gbk.txt"); //GBK编码 6个字节
// 创建转换流对象,在构造方法中绑定字节输入流对象,使用默认编码表GBK
InputStreamReader isr = new InputStreamReader(fis);
char[] c = new char[1024];
int len =0;
while((len = isr.read(c)) != -1){
System.out.println(new String(c,0,len)); // 你好啊
}
isr.close();
}
// 1.转换流 InputStreamReader对象使用UTF-8编码表,读取文本
public static void function_2() throws IOException{
// 创建字节输入流对象
FileInputStream fis = new FileInputStream("E:\\workspace\\Demo\\utf.txt"); // UTF-8编码 9个字节
// 创建转换流对象,在构造方法中绑定字节输入流对象,使用UTF-8编码表
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
char[] c = new char[1024];
int len =0;
while((len = isr.read(c)) != -1){
System.out.println(new String(c,0,len)); // 你好啊
}
isr.close();
}
}