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()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写
  • 相关阅读:
    (Java实现) 洛谷 P1106 删数问题
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1106 删数问题
    目测ZIP的压缩率
  • 原文地址:https://www.cnblogs.com/StephenChenin/p/9141798.html
Copyright © 2011-2022 走看看