IO流

流分类:

  • 流向:输入流和输出流
  • 数据:字节流和字符流

字符流和字节流和文件:

  • 字节流:可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的,包括二进制、音频、视频、doc等
    输入流:InputStream FileInputStream
    输出流:OutputStream FileOutputStream
		FileInputStream fis = new FileInputStream("aaa.mp3");	//创建输入流对象,关联aaa.mp3
		FileOutputStream fos = new FileOutputStream("bbb.mp3");//创建输出流对象,关联bbb.mp3,如果没有bbb.txt,会创建出一个
		
		int b;
		while((b = fis.read()) != -1) { //没读到内容时返回-1
			fos.write(b);
		}
		
		fis.close();
		fos.close();

		FileInputStream fis = new FileInputStream("xxx.mp3");
		FileOutputStream fos = new FileOutputStream("copy.mp3");
		byte[] arr = new byte[fis.available()];					//根据文件大小做一个字节数组
		fis.read(arr);											//将文件上的所有字节读取到数组中
		fos.write(arr);											//将数组中的所有字节一次写到了文件上
		fis.close();
		fos.close();


		FileInputStream fis = new FileInputStream("xxx.mp3");
		FileOutputStream fos = new FileOutputStream("copy.mp3");
		int len;
		byte[] arr = new byte[1024 * 8];					//自定义字节数组
		 
		while((len = fis.read(arr)) != -1) {
			//fos.write(arr);
			fos.write(arr, 0, len);							//写出字节数组写出有效个字节个数
		}
		
		fis.close();
		fos.close();
  • 字符流:只能处理纯文本,全部为可见字符,txt、html
    输入流:Reader FileReader
    输出流:Writer FileWriter
//字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出.
//FileReader类的read()方法可以按照字符大小读取
//FileWriter类的write()方法可以自动把字符转为字节写出
		FileReader fr = new FileReader("a.txt");
		FileWriter fw = new FileWriter("b.txt");
		
		int ch;
		while((ch = fr.read()) != -1) {
			fw.write(ch);
		}
		
		fr.close();
		fw.close();
		FileReader fr = new FileReader("aaa.txt");			//创建字符输入流,关联aaa.txt
		FileWriter fw = new FileWriter("bbb.txt");			//创建字符输出流,关联bbb.txt
		
		int len;
		char[] arr = new char[1024*8];						//创建字符数组
		while((len = fr.read(arr)) != -1) {					//将数据读到字符数组中
			fw.write(arr, 0, len);							//从字符数组将数据写到文件上
		}
		
		fr.close();											//关流释放资源
		fw.close();	

操作:

1)建立联系 File对象
2)选择流
3)操作 数组大小+read、write
4)释放资源

处理流:

增强功能,提高性能,节点流之上
一、缓冲流
1)字节缓冲流
BufferedInputStream BufferedOutputStream


		FileInputStream fis = new FileInputStream("aaa.mp3");			//创建文件输入流对象,关联aaa.mp3
		BufferedInputStream bis = new BufferedInputStream(fis);			//创建缓冲区对fis装饰
		FileOutputStream fos = new FileOutputStream("copy.mp3");		//创建输出流对象,关联copy.mp3
		BufferedOutputStream bos = new BufferedOutputStream(fos);		//创建缓冲区对fos装饰
		
		int b;
		while((b = bis.read()) != -1) {		
			bos.write(b);
		}
		
		bis.close();						//只关装饰后的对象即可
		bos.close();

2)字符缓冲流
BufferedReader BufferedWriter

//BufferedReader的read()方法读取字符时会一次读取若干字符到缓冲区, 然后逐个返回给程序, 降低读取文件的次数, 提高效率
//BufferedWriter的write()方法写出字符时会先写到缓冲区, 缓冲区写满时才会写到文件, 降低写文件的次数, 提高效率

		BufferedReader br = new BufferedReader(new FileReader("aaa.txt"));	//创建字符输入流对象,关联aaa.txt
		BufferedWriter bw = new BufferedWriter(new FileWriter("bbb.txt"));	//创建字符输出流对象,关联bbb.txt
		
		int ch;				
		while((ch = br.read()) != -1) {		//read一次,会先将缓冲区读满,从缓冲区中一个一个的返给临时变量ch
			bw.write(ch);					//write一次,是将数据装到字符数组,装满后再一起写出去
		}
		
		br.close();							//关流
		bw.close();  
// BufferedReader的readLine()方法可以读取一行字符(不包含换行符号)
// BufferedWriter的newLine()可以输出一个跨平台的换行符号"\r\n"

		BufferedReader br = new BufferedReader(new FileReader("aaa.txt"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("bbb.txt"));
		String line;
		while((line = br.readLine()) != null) {
			bw.write(line);
			//bw.write("\r\n");					//只支持windows系统
			bw.newLine();						//跨平台的
		}
		
		br.close();
		bw.close(); 

二、转换流:字节流转字符流,处理乱码

//FileReader是使用默认码表读取文件, 如果需要使用指定码表读取, 那么可以使用InputStreamReader(字节流,编码表)
//FileWriter是使用默认码表写出文件, 如果需要使用指定码表写出, 那么可以使用OutputStreamWriter(字节流,编码表)

		BufferedReader br = 									//高效的用指定的编码表读
				new BufferedReader(new InputStreamReader(new FileInputStream("UTF-8.txt"), "UTF-8"));
		BufferedWriter bw = 									//高效的用指定的编码表写
				new BufferedWriter(new OutputStreamWriter(new FileOutputStream("GBK.txt"), "GBK"));
		int ch;
		while((ch = br.read()) != -1) {
			bw.write(ch);
		}
		
		br.close();
		bw.close();

IO流(flush和close方法的区别)

  • flush()方法
    • 用来刷新缓冲区的,刷新后可以再次写出
  • close()方法
    • 用来关闭流释放资源的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写
posted @ 2018-06-05 20:45  Steph_Chen  阅读(104)  评论(0编辑  收藏  举报