zoukankan      html  css  js  c++  java
  • 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()可以输出一个跨平台的换行符号"
    "
    
    		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("
    ");					//只支持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()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写
  • 相关阅读:
    [视频]想做你的Code
    Visual Studio 2010网剧第四集:《为爱Debug》
    jQuery之工具函数
    Visual Studio 2010网剧第二集《让爱延长》
    Visual Studio 2010网剧最终季:《让爱编译通过》
    【TDS学习文档1】入门
    【DB2学习文档之七】SQL for DB2
    【TDS学习文档5】IBM Directory schema的管理3——attributes
    【TDS学习文档2】概念理解
    【Linux使用】vsFTPd 服务器简明配置指南
  • 原文地址:https://www.cnblogs.com/StephenChenin/p/9141798.html
Copyright © 2011-2022 走看看