IO流分类以及分别使用字节流、字符流复制文本文件、复制图片
前言
IO流分类:
*流向
输入流 读取数据 FileReader Reader
输出流 写出数据 FileWriter Writer
*数据类型
- 字节流
字节输入流 读取数据 InputStream
字节输出流 写出数据 OutputStream - 字符流
字符输入流 读取数据 Reader
字符输出流 写出数据 Writer。
一、分别使用字节流、字符流复制文本文件
//创建字符输入流对象
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();
//创建字节输入流对象
FileInputStream fis = new FileInputStream("IODemo.java");
//创建字节输出流对象
FileOutputStream fos = new FileOutputStream("d:\\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();
二、分别使用字节流、字符流复制图片文件
1.字符流可以复制图片,但是打不开,报错
/**
* 字符流
* @throws FileNotFoundException
* @throws IOException
*/
private static void method() throws FileNotFoundException, IOException {
//创建字符输入流对象
FileReader fr = new FileReader("图片.jpg");
//创建字符输出流对象
FileWriter fw = new FileWriter("d:\\图片.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();
}
2.字节流可以复制图片,正常使用
/**
* 字节流
* @throws FileNotFoundException
* @throws IOException
*/
private static void method2() throws FileNotFoundException, IOException {
//创建字节输入流对象
FileInputStream fis = new FileInputStream("图片.jpg");
//创建字节输出流对象
FileOutputStream fos = new FileOutputStream("d:\\图片.jpg");
//一次读写一个字节数组
int len;//用于存储读到的字节个数
byte[] bys = new byte[1024];
while((len = fis.read(bys)) != -1) {
fos.write(bys,0,len);
}
//释放资源
fos.close();
fis.close();
}
总结
- 二进制文件只能使用字节流进行复制,图片、视频(使用windows自带记事本打开读不懂的)
- 文本文件的复制既可使用字符流,也可以使用字节流