【Reader和Writer】
1、字符流原理
Reader是字符输入流的父类。
Writer是字符输出流的父类。
字符流是以字符(char)为单位读写数据的。一次处理一个unicode。
字符流的底层仍然是基本的字节流。
2、Reader与Writer常用方法
Reader的常用方法:
-int read():读取一个字符,返回的int值“低16”位有效。
-int read(char[] chs):从该流中读取一个字节数组的length个字符并存入该数组,返回值为实际读取到的字符量。
Writer的常用方法:
-void write(int c):写出一个字符,写出给定int值“低16”位表示的字符。
-void write(char[] chs):将给定字符数组中所有字符写出。
-void write(String str):将给定的字符串写出。
-void write(char[] chs,int offset,int len):将给定的字符数组中从offset开始连续的len个字符写出。
【转换流】
1、字符转换流原理
InputStreamReader:字符输入流。
-使用该流可以设置字符集,并按照指定的字符集从流中按照该编码将字节数据转换为字符并读取。
OutputStreamWriter:字符输出流。
-使用该流可以设置字符集,并按照指定的字符集将字符转换为对应字节后通过该流写出。
2、使用转化流指定字符集编码
InputStreamReader的构造方法允许我们设置字符集:
-InputStreamReader(InputStream in,String charsetName):基于给定的字节输入流以及字符编码创建ISR
-InputStreamReader(InputStream in):该构造方法会根据系统默认字符集创建ISR
OutputStreamWriter的构造方法:
-OutputStreamWriter(OutputStream out,String charsetName):基于给定的字节输出流以及字符编码创建OSW
-OutputStreamWriter(OutputStream out):该构造方法会根据系统默认字符集创建OSW
3、使用OSW输出字符数据
public void testOutput() throws IOException{
FileOutputStream fos=new FileOutputStream("demo.txt");
OutputStreamWriter writer=new OutputStreamWriter(fos,"UTF-8");
String str="大家好!";
writer.write(str);
writer.close();
}
public void testOSW() throws Exception{
FileOutputStream fos=new FileOutputStream("osw.txt");
//根据指定编码写出字符串,编码名称忽略大小写
OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK");
osw.write("才是真的好!");
osw.close();
}
4、使用ISR输入字符数据
public void testInput() throws IOException{
FileInputStream fis=new FileInputStream("demo.txt");
InputStreamReader read=new InputStreamReader(fis,"UTF-8");
int c=-1;
while((c=reader.read())!=-1){
}
reader.close();
}
public void testISR() throws Exception{
FileInputStream fis=new FileInputStream("osw.txt");
//根据指定编码写出字符串,编码名称忽略大小写
InputStreamReader isr=new InputStreamReader(fis,"GBK");
int chs=-1;
while((chs=isr.read())!=-1){
}
isr.close();
}
【演示】
1、以下代码是字符输出流
public class OSWDemo{
public static void main(String[] args) throws IOException{
FileOutputStream fos=new FileOutputStream("osw.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK");
osw.write("和我在成都的街头走一走,哦哦哦哦。");
osw.write("直到所有的灯都熄灭了,也不停留。");
osw.close();
}
}
2、以下代码是字符输入流
public class ISRDemo{
public static void main(String[] args){
FileInputStream fis=new FileInputStream("osw.txt");
InputStreamReader isr=new InputStreamReader(fis);
int d=-1;
while((d=isr.read())!=-1){
}
isr.close();
}
}
3、以下是具有自动行刷新的缓冲字符输出流
public class PWDemo{
public static void main(String[] args){
PrintWriter pw=new PrintWriter("pw.txt","UTF-8");
pw.println("该配合你演出的我视而不见。");
pw.println("别逼一个最爱你的人即兴表演。");
pw.close();
}
}
4、以下也是具有自动行刷新的缓冲字符输出流
public class PWDemo2{
public static void main(String[] args){
FileOutputStream fos=new FileOutputStream("pw2.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
PrintWriter pw=new PrintWriter(osw);
pw.println("你好!");
pw.println("呵呵!");
pw.println("嘿嘿!");
}
}
5、以下是缓冲字符输入流
public class BRDemo{
public static void main(String[] args){
FileInputStream fis=new FileInputStream("src"+File.separator+"day09"+File.separator+"BRDemo.java");
InputStreamReader isr=new InputStreamReader(isr);
BufferedReader br=new BufferedReader(isr);
String line=null;
while((line=br.readLine())!=null){
}
br.close();
}
}
领取专属 10元无门槛券
私享最新 技术干货