目录
一:解释
由于字节流操作中文不是特别方便,所以,java就提供了转换流。
字符流=字节流+编码表。
二:转换流输入流
1:构造方法
由于Reader是抽象类所以用它的子类InputStreamReader
(1)InputStreamReader(InputStream in)(由于InputStream是抽象类所以用子FileInputStream)
读取数据,根据默认的编码用字符作为桥梁将字节流转换为字符流创建一个使用默认字符集的InputStreamReader。
(2)InputStreamReader(InputStream in, String charsetName)
读取数据,根据指定的编码用字符作为桥梁将字节流转换为字符流创建一个使用命名字符集的InputStreamReader。
2:InputStreamReader读数据方法
public int read():一次只读一个字符
public int read(char[] cbuf):一次读取一个字符数组
3:例子
package day31;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class Test1 {
public static void main(String[] args) throws Exception{
//创建转换流对象使用默认编码
InputStreamReader ir = new InputStreamReader(new FileInputStream("a.txt"));
//一个字符读入
int i=0;
while((i=ir.read())!=-1){
System.out.print((char)i);
}
//关闭资源
ir.close();
}
}
结果是:
有些累了,放下笔,漫步在后院的茉莉花丛中,欣赏随风飞舞的花瓣。在微泛枯黄的花瓣中,我看到了寂寞的影子。
Process finished with exit code 0
package day31;
import java.io.FileInputStream;
import java.io.InputStreamReader;
public class Test1 {
public static void main(String[] args) throws Exception{
//创建转换流对象使用指定编码
InputStreamReader ir = new InputStreamReader(new FileInputStream("a.txt"),"GBK");
//一个字符数组读入
char[] c=new char[1024];
int l =0;
while((l=ir.read(c))!=-1){
System.out.println(new String(c,0,c.length));
}
//关闭资源
ir.close();
}
}
结果是:
鏈変簺绱簡锛屾斁涓嬬瑪锛屾极姝ュ湪鍚庨櫌鐨勮寜鑾夎姳涓涗腑锛屾璧忛殢椋庨鑸炵殑鑺辩摚銆傚湪寰硾鏋粍鐨勮姳鐡d腑锛屾垜鐪嬪埌浜嗗瘋瀵炵殑褰卞瓙銆�
Process finished with exit code 0
3:注意
指定编码不与文件所使用的编码一样时会出现乱码
三:转换流输出流
1:构造方法
由于Reader是抽象类所以用它的子类OutputStreamWriter 字符输出流
(1)public OutputStreamWriter(OutputStream out)(由于InputStream是抽象类所以用子类FileOnputStream)根据默认编码用字符流作为桥梁将字节流转成字符流
(2)public OutputStreamWriter(OutputStream out,String charsetName)根据指定的编码用字符流作为桥梁将字节流转成字符流
2:OutputStreamWriter写数据方法
public void write(int c)一次写一个字节
public void write(char[] cbuf)一次写一个字节数组
public void write(char[] cbuf,int off,int len)一次写一个字节数组一部分
public void write(String str)一次写入一个字符串
public void write(String str,int off,int len)一次写入字符串一部分
3:例子
package day31;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
public class Test2 {
public static void main(String[] args) throws Exception{
//创建转换流输出流使用默认编码
OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream("t.txt"));
//一次写一个字符
ow.write('a');
//一次写一个字符数组
char[] c={'1','a','j'};
ow.write(c);
//一次写一个字节数组一部分
ow.write(c, 0, 1);
//一次写一个字符串
ow.write("hello world");
//一次写入一个字符串一部分
ow.write("hello", 0, 4);
//关闭资源
ow.close();
}
}
结果是:当前目录下有一个t.txt文件内容是
a1aj1hello worldhell
package day31;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
public class Test2 {
public static void main(String[] args) throws Exception{
//创建转换流输出流使用指定编码
OutputStreamWriter ow = new OutputStreamWriter(new FileOutputStream("m.txt"),"GBK");
//一次写一个字符
ow.write('a');
//一次写一个字符数组
char[] c={'1','a','j'};
ow.write(c);
//一次写一个字节数组一部分
ow.write(c, 0, 1);
//一次写一个字符串
ow.write("hello world");
//一次写入一个字符串一部分
ow.write("你好,世界", 0, 4);
//关闭资源
ow.close();
}
}
结果是:当前目录下有一个m.txt文件内容是
a1aj1hello world����