对于流,大家或许不陌生,但是也总是容易相见不相识。
不是说它的流向分类:
比如
输入流 --> 读取数据 FileReader Reader
输出流 --> 写出数据 FileWriter Writer
流向分类很清楚,读或者写。
比较容易迷糊的地方是这个,那就是IO流当中的其流的数据类型分类。
字节流
字节输入流 --> 读取数据 InputStream
字节输出流 --> 写出数据 OutputStream
字符流
字符输入流 --> 读取数据 Reader
字符输出流 --> 写出数据 Writer
就是这两个。
怎么区分?
简单点,那就是字节以Byte为单位,小了点,小的好处理,就是Stream可以处理的快很多。
字符,比字节大,那大的话,就以 “er”结尾的两个 Reader 和Writer处理,因为这两个都是“er”结尾的名词。
 ̄□ ̄||~真的拙略的记忆方式。哈哈哈~
案例代码部分:
1 利用字符流复制文本文件
//利用字符流将当前工程下的IODemo.java拷贝到d盘的a文件夹下
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/*
* 使用字符流复制文本文件
*
* 数据源 IODemo.java
* 目的地 d:\\IODemo.java
*
*/
public class FileCopyDemo {
public static void main(String[] args) throws IOException {
//创建字符输入流对象
FileReader fr = new FileReader("IODemo.java");
//创建字符输出流对象
FileWriter fw = new FileWriter("d:\\IODemo.java");
//一次读写一个字符
/*int ch;
while((ch = fr.read()) != -1) {
fw.write(ch);
fw.flush();
}*/
//一次读写一个字符数组
int len;//用于存储读到的字符个数
char[] chs = new char[1024];
while((len = fr.read(chs)) != -1) {
fw.write(chs,0,len);
fw.flush();
}
//释放资源
fw.close();
fr.close();
}
}
2 利用字节流复制文本文件
//利用字节流将当前工程下的IODemo.java拷贝到d盘下
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/*
* 使用字节流复制文本文件
*
* 数据源 IODemo.java
* 目的地 d:\\a\\IODemo.java
*
*/
public class FileCopyDemo {
public static void main(String[] args) throws IOException {
//创建字节输入流对象
FileInputStream fis = new FileInputStream("IODemo.java");
//创建字节输出流对象
FileOutputStream fos = new FileOutputStream("d:\\a\\IODemo.java");
//一次读写一个字节
/*int by;
while((by = fis.read()) != -1) {
fos.write(by);
}*/
//一次读写一个字节数组
int len;//存储读到的字节个数
byte[] bys = new byte[1024];
while((len = fis.read(bys)) != -1) {
fos.write(bys,0,len);
}
//释放资源
fos.close();
fis.close();
}
}
3 复制图片
在此,请注意两点要点,也是之后的我们操作流过程当中要谨记的两点注意:
字节流可以操作所有类型的文件,因为所有的文件在计算机中都是以字节形式存储
字符流只能用来操作纯文本类型的文件,不能操作字节类型的文件
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/*
* 分别使用字符流和字节流复制图片
*
* 二进制文件只能使用字节流进行复制(使用windows自带记事本打开读不懂的)
* 文本文件的复制即可使用字符流,也可以使用字节流
*
*/
public class CopyImage {
public static void main(String[] args) throws IOException {
//method();
//创建字节输入流对象
FileInputStream fis = new FileInputStream("yonna.jpg");
//创建字节输出流对象
FileOutputStream fos = new FileOutputStream("d:\\yonna.jpg");
//一次读写一个字节数组
int len;//用于存储读到的字节个数
byte[] bys = new byte[1024];
while((len = fis.read(bys)) != -1) {
fos.write(bys,0,len);
}
//释放资源
fos.close();
fis.close();
}
private static void method() throws FileNotFoundException, IOException {
//创建字符输入流对象
FileReader fr = new FileReader("yonna.jpg");
//创建字符输出流对象
FileWriter fw = new FileWriter("d:\\yonna.jpg");
//一次读写一个字符数组
int len;//用于存储读到的字符个数
char[] chs = new char[1024];
while((len = fr.read(chs)) != -1) {
fw.write(chs,0,len);
fw.flush();
}
//释放资源
fw.close();
fr.close();
}
}
以上。