一、IO流分类:
(一)按流向分类
1.输入流 读取数据 FileReader Reader
2.输出流 写出数据 FileWriter Writer
(二)数据类型:
1.字节流:可以读取视频、图片等
(1)字节输入流 读取数据 InputStream
(2)字节输出流 写出数据 OutputStream
2.字符流:读取文本适宜
(1)字符输入流 读出数据 Reader
(2)字符输入流 写出数据 Writer
例子:复制一个文件
FileReader fr = new FileReader("IODemo.java");
FileWriter fw = new FileWriter("d:\\IODome.java");
//一次读写一个字符
int ch;
while((ch = fr.read()) != -1){
fw.writer(ch);
fw.flush();
}
//一次读写一个字符数组
int len;
char[] chs = new char[1024];
while((len = fr.read(chs))!= -1){
fw.write(chs,0,len);
}
fw.close();
fr.close();
二、InputStream
(一)在java.io包下,此抽象类表示字节输入流的所有类的超类
例子:分别使用字符流和字节流复制图片
FileReader fr = new FileReader("1.jpg");
FileWriter fw = new FileWriter("D:\\1.jpg");
//一次读写一个字符数组
int len;
char[] chs = new char[1024];
while((len = fr.read(chs))!=-1){
fw.writer(chs,0,len);
fw.flush();
}
fw.close();
fr.close();//无法正确读取文件
FileInputStream fis = new FileInputStream("1.jpg");
FileOutputStream fos = new FileOutputStream("d:\\1.jpg");
//一次读取一个字节数组
int len;
byte[] bys = new byte[1024];
while((len = fis.read(bys))!=-1){
fos.writer(bys,0,len);//不需要刷新,直接写入文件
}
fos.close();
fis.close();//可以看到图片
因为二进制文件只能使用字节流进行复制,使用windows自带记事本打开读不懂的就是二进制文件。文本文件的复制既可以使用字符流,也可以使用字节流。