一、流的概念
流:对数据操作的对象。
根据流的方向。分类:输入流和输出流。
输入流读取数据,但是不能写入数据。输出流只能写入数据,不能读取数据。
根据处理数据类型不同。分类:字节流和字符流。
字节流以字节为基本单位进行处理,也称为原始数据,适合7 位ASCII码操作;而字符流以字符为基本单位进行处理,用2字节的Unicode作为编码。
二、字节流(InputStream和OutputStream类)
InputStream是所有字节输入流的父类;OutputStream是所有字节输出流的父类。
1、InputStream类(输入流)
(1)InputStream有5个低级输入流
ByteArrayInputStream 从内存数组中读取数据字节
FileInputStream 从本地文件系统中读取数据字节
PipedInputStream 从线程管道中读取数据字节
StringBufferInputStream 从字符串中读取数据字节
SequenceInputStream 将多个InputStream合并为一个
(2)除了构造方法外,InputStream中所提供的方法如下:
int read(); //读取数据
close(); //关闭流
void mark(); //标记流
void reset(); //重置流
2、OutputStream类(输出流)
(1)输出数据的方法如下:
void write();/写入数据
flush()l //刷新流
close(); //关闭流
字节流操作图片,代码如下:
public class PhotoDemo {
public PhotoDemo() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
File f = new File("C://01.jpg");
File f1 = new File("C://03.jpg");
// TODO Auto-generated method stub
try {
FileImageInputStream fiis = new FileImageInputStream(f);
FileImageOutputStream fios = new FileImageOutputStream(f1);
byte[] b = new byte[(int) fiis.length()];
int len = 0;
fiis.read(b, 0, len );
while((len = fiis.read(b))!=-1){
fios.write(b, 0, len);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
三、字符流(Write和Reader类)
1、Write类
(1)向输出流写入字符
void writer();
(2)刷新输出流,并且输出所有被缓存的字节。
flush();
(3)关闭流
close();
2、Reader类
(1)Reader类的常用子类及其功能
CharArrayReader//从字符数组中读取数据
FileReader //从本地文件系统中读取字符序列
StringReader//从字符串中读取字符序列
PipedReader//从线程管道中读取字符序列
(2)Reader类的主要方法
read(); //读取字符
close(); //关闭流
字符流操作文件。代码如下:
public class MyTestIO {
public MyTestIO() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
FileWriter fw = new FileWriter("E://you.txt");
FileReader fr = new FileReader("E://my.txt");
char[] ch = new char[5];
int i = fr.read(ch);
fw.write(ch, 0, i);
fr.close();
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}