io包之:字符流(流的转换)
一、字符流
1.概念
字符流是字符串的一种传输模式
2.分类
2.1Reader类
案例1:字符流实现文件的读取(单个字符模式)
FileReader fr=new FileReader("e:\\aa.txt");
int n=0;
while((n=fr.read())!=-1){ //如读取到文件最后(返回-1)
System.out.println((char)n);
}
fr.close();
或者:
File f = new File("e:\\aa.txt");
FileReader fr=new FileReader(f);
char[] cbuf=new char[(int)f.length()];
int n=0;
while((n=fr.read(cbuf))!=-1){ //如读取到文件最后(返回-1)
System.out.println(new String(cbuf));
}
fr.close();
案例2:字符流实现文件的读取(一行模式)
FileReader fr=new FileReader("e:\\aa.txt");
BufferedReader br=new BufferedReader(fr); //FileReader继承了reader
String str=null;
while((str=br.readLine()) != null){ //每次只读取一行
System.out.println(str);
}
br.close();
fr.close();
2.1.1FileReader类
int read(); //读取单个字符,如果读到文件尾,返回-1
int read(char[] ch); //将流中的字符读入到char数组
2.1.2BufferedReader类
String readLine(); //每次读取一行(说明它是以换行为分割标识的)
2.2Writer类
案例1 通过字符流写文件
FileWriter fw=new FileWriter("e:\\1.txt");
fw.write("abcdef");
fw.close();
案例2 通过字符流写多行
FileWriter fw=new FileWriter("e:\\1.txt");
fw.write("abcdef ");
fw.write("123456789 ");
fw.write("好好学习");
fw.close();
2.2.1FileWriter类
void write(int n) //写入单个字符
void write(String str) //写入字符串
void write(char[] ch) //写入字符数组
2.2.1BufferedWriter类
void newLine() //写入一个换行符
void flush() //刷新缓冲区中的数据
二、模仿Scanner控制台输入功能
InputStream is = System.in; //System.in是系统标准输入流,返回字节输入流
byte[] bs = new byte[1024]; //设置接收数组为1024字节
int n = is.read(bs); //读取流中间的内容,放入bs字节数组。(返回读取的个数)
String str=new String(bs,0,n); //将字节数组bs,从下标0开始到n的内容转换成字符串
System.out.println(str.trim()); //去空白
三、字节流转字符流
重点案例:一边读一边写
File f = new File("e:\\1.txt");
//字符输出流
FileWriter fw = new FileWriter(f);
BufferedWriter bw = new BufferedWriter(fw);
//字节输入流解码字符输入流
InputStream is = System.in; //创建系统设备标准输入流(字节模式)
InputStreamReader isr = new InputStreamReader(is); //将字节解码字符
BufferedReader br = new BufferedReader(isr); //创建字符输入流
while(true){
//读控制台输入的
String str = br.readLine(); //从控制台接收内容中读取一行
if(str.equals("exit"){ //如果是"exit"就退出
break;
}
//写控制台输入的
bw.writer(str); //str为控制台输入的一行字符串
bw.newLine(); //换行
}
bw.flush();
bw.close();
isr.close();
fw.close();
1.InputStreamReader 字节输入流 转 字符输入流
作用:将字节流转换成字符流
InputStreamReader是字节流通向字符流的桥梁,它读取字节并将其解码为字符。
2.OutputStreamWriter 字节输出流 转 字符输出流
四、全面掌握IO(输入/输出流)
1.InputStream最重要的三个read方法:
abstract read() //从输入流中读取数据的下一个字节
int read(byte[] b) //从输入流中读取一定数量的字节,并将其存储在缓冲区数组b中。
int read(byte[] b, int off, int len) //将输入流中最多len个数据字节读入byte数组
2.Reader中的read方法:
int read() //读取单个字符
int read(char[] cbuf) //将字符读入数组
abstract read(char[] cbuf, int off, int len) //将字符读入数组的某一部分
int read(CharBuffer target) //试图将字符读入指定的字符缓冲区
- OutputStream中最重要的write方法:
void write(byte[] b) //将b.length个字节从指定的byte数组写入此输出流。
void write(byte[] b, int off, int len) //将指定byte数组中从偏移量off开始的len个字节写入此输出流。
abstract void write(int b) //将指定的字节写入此输出流
- Writer中最重要的write方法
void write(char[] cbuf) //写入字符数组
abstract void write(char[] cbuf, int off, int len) //写入字符数组的某一部分
void write(int c) //写入单个字符
void write(String str) //写入字符串
void write(String str, int off, int len) //写入字符串的某一部分