学无先后,达者为师

网站首页 编程语言 正文

IO流分类以及分别使用字节流、字符流复制文本文件、复制图片

作者:weixin_44804207 更新时间: 2022-07-13 编程语言

IO流分类以及分别使用字节流、字符流复制文本文件、复制图片

  • 前言
  • 一、分别使用字节流、字符流复制文本文件
  • 二、分别使用字节流、字符流复制图片文件
    • 1.字符流可以复制图片,但是打不开,报错
    • 2.字节流可以复制图片,正常使用
  • 总结


前言

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自带记事本打开读不懂的)
  • 文本文件的复制既可使用字符流,也可以使用字节流

原文链接:https://blog.csdn.net/weixin_44804207/article/details/125724471

栏目分类
最近更新