------- android培训、java培训、期待与您交流! ----------------
IO流
四大基类
字节流两个基类:OutputStream 和 IntputStream
字节流两个基类:Reader 和 Writer
1.字符流
1.1字符流的特点
IO流是用来操作数据
数据的最常见体现形式是:文件
一个专门用来操作文件的Writer子类对象是FileWriter
A.构造方法,传递String型文件名
B.读取的方法,单个字符,字符数组
1.2方法
FileReader 读取字符、
1.每次读一个字符 read() 返回值 int 每次读取的字符的个数
2.每次读一个字符数组 read(char[] chars) 返回值 int 每次读取的字符的个数
3.每次读一行 readLine() 返回值为所读的那一行的数据
注意:每次读取的时候,以\r\n 结束,当读到\r\n 的时候则表示一行读取结束
FileWriter 写字符
1.每次写一个字符 write()
2.每次写一个字符数组或者字符数组的一部分 write(char[] chars,int startIndex ,int endIndex)
chars 代表了所读取的的数据
startIndex 代表了将要写入的数据在数组中的起始位置
endIndex 代表了将要写入的数据在数组中的结束位置
3.每次写一行 write(String line)
line 代表了每次读取到的数据
注意:每次读的时候不会将\r\n 读取进来, 因此需要手动换行, 方法:newLine()
注意:每次写入结束都需要刷新,flush()
刷新目的:将缓存的数据保存到文件中。
为了节省内存资源,每次程序结束是需要关闭资源 close()
2.字节流
InputStream 读取字节
1.每次读取一个字节 read() 返回值是int型 代表每次读取字节的个数
2.每次读取一个字节数组 read(byte[] bytes) 返回值是int型 每次读取的字节的个数
OutputStream 写字节
1.每次写一个字节 write()
2.每次写一个字节数组,或者字节数组的一部分 write(byte[] bytes,int startIndex,int endIndex)
bytes 代表每次读取的数据
startIndex 代表每次写入的数据在数组中的起始位置
endIndex 代表每次写入的数据在数组中的结束位置
3.字节流的缓冲区对象 -- 纯字节,字节数组
BufferedInputStream
构造方法,传递字节输入流
BufferedOutputStream
构造方法,传递字节输出流
利用缓冲区复制,不如数组缓冲速度快
字节流复制,字符流复制
推荐使用数组缓冲,提高效率
字符流,读写行的时候
import java.io.*;
public class CopyDemo2 {
public static void main(String[] args)throws IOException {
//1.创建流对象
InputStream is = null;
OutputStream os = null;
//2.数据目的
is = new FileInputStream("D:\\a.exe");
os = new FileOutputStream("E:\\a.exe");
//规定每次最多读取字节数,存入字节数组,为1024字节
byte[] bt = new byte[1024];
int len = 0;
while ((len = is.read(bt))!=-1) {
//写入
os.write(bt,0,len);
//刷新
os.flush();
}
//3.关闭数据源
is.close();
}
}
4.转换流
使用了字符流的概念,操作了字节流,简单方便,实现了字节流的行操作
InputSreamReader
读入字节,返回值是字符 实现字节变字符
OutputStreamWriter
将输入的字符变成字节
两个转换流,构造方法中,传递的参数都是字节流
InputStreamReader 传递字节输入流
OutputStrreamWriter传递的是字节输出流
Buffered进行包装
BufferedReader包装字节转成字符的流,InputStreamReader,读取一行
下面请看一个实例
从键盘输入字母,将字母转换成大写输出在控制台
/*
* 读取键盘输入,将读取到的所有内容,转成大写,打印回控制台(System.out.println)
System.out 标准输出流 -- OutputStream
数据源,键盘输入 System.in InputStream
用转换流将数据源转成字符,读取一行
用转换流,将字符转成字节,输出到控制台
数据目的,是控制台System.out OutputStream
*/
import java.io.*;
public class TranseDemo2 {
public static void main(String[] args) throws IOException {
// 创建流对象,数据键盘输入
InputStream in = System.in;
// 将in转成字符流,读取一行,存入字符流的缓冲区
BufferedReader bfr = new BufferedReader(new InputStreamReader(in));
// 数据源变成字符流,将字符数据输出到自节流的控制台
// 将字符流转成字节流,
// 既然OutputStreamWriter是字符流,可以用字符输出流的缓冲区
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(
System.out));
String line = null;
while ((line = bfr.readLine()) != null) {
if ("over".equals(line))
break;
bfw.write(line.toUpperCase());
bfw.newLine();
bfw.flush();
}
}
}
规律:
A. 构造方法都是字节流
B. 都是在用字符流的缓冲区,操作字节数据
如果你确定,字节流中的数据也是文本数据,推荐使用转换流操作,方便简单
数据源,和数据集目的,可以随时发生变化
---------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ---------------------- 详细请查看:www.itheima.com