zoukankan      html  css  js  c++  java
  • io流之转换流与缓冲流

    转换流:输出转换字符流

    将要写入流中的字符编码成字节。作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。

    转换流概述

    OutputStreamWriter:字符输出流——写出数据

            public OutputStreamWriter(OutputStream out)

            public OutputStreamWriter(OutputStream out,String charsetName)

    InputStreamReader :字符输入流——读取数据

            public InputStreamReader(InputStream in)

            public InputStreamReader(InputStream in,String charsetName)
    先创建一个txt文件编码为utf-8的格式,如果文本文件跟你的程序不一个码表,则用转换流进行转换

    package com.oracle.demo01;
    
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    
    public class Demo01 {
    	  public static void main(String[] args) throws IOException {
    		//明确目的地
    		  FileOutputStream fos=new FileOutputStream("D:\java\a.txt");
    		//创建转换流
    		  OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
    		//写入字符
    		  osw.write("起于凡而非凡");
    		  osw.flush();
    		//释放资源
    		  osw.close();
    	}
    }
    

      

    package com.oracle.demo01;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.UnsupportedEncodingException;
    
    public class Demo02 {
    	   public static void main(String[] args) throws IOException {
    	   //明确数据源
    		 FileInputStream fis= new FileInputStream("D:\java\a.txt");
    	   //创建转换流对象
    		 InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
    		 int len=0;
    		 char[] ch=new char[1024];
    		 //开始读
    		 while((len=isr.read(ch))!=-1){
    			 System.out.println(new String(ch,0,len));
    		 }
    	     //释放资源
    		 isr.close();
    	}
    }
    

      把a.txt文件里的内容以及格式同样的复制到a.txt文件里

    package com.oracle.demo01;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.UnsupportedEncodingException;
    
    public class Copy {
    	   public static void main(String[] args) throws IOException {
    	   //1.先明确数据源
    		 FileInputStream fis=new FileInputStream("D:\java\a.txt");
    	   //2.创建字符输入转换流
    		 InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
    	   //3.明确目的地
    		 FileOutputStream fos=new FileOutputStream("D:\java\aa.txt");
    	   //4.创建字符输出转换流
    		 OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
    	   //开始复制
    		 char[] ch=new char[1024];
    		 int len=0;
    		 while((len=isr.read(ch))!=-1){
    			 osw.write(ch,0,len);
    			 osw.flush();
    		 }
    		  //释放资源
    		  isr.close();
    		  osw.close();
    	}
    }
    

    缓冲流:就是用来加速的流,提供高效的写入

    关键字:Buffered

    字节缓冲流有两个分别是:

    字节缓冲输入流:BufferedInputStream

    字节缓冲输出流:BufferedOutputStream

    package com.oracle.demo02;
    
    import java.io.BufferedOutputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class Demo01 {
    	   public static void main(String[] args) throws IOException {
    	   //明确目的地(输出)写到txt文件里
    	     FileOutputStream fos=new FileOutputStream("D:\java\hello.txt");
    	   //创建缓冲区对象(给字节输出流添加缓冲区)
    	     BufferedOutputStream bos=new BufferedOutputStream(fos);
    	   //写入字节
             bos.write("abc123".getBytes());
           //释放资源
             bos.close();
             
    	}
    }
    

    以上代码是字节缓冲输出流,我要明确目的地是哪个文件,然后创建缓冲区用来加速,写入字节,最后谁调用的就释放谁,最后运行,查看一下成没成功。

    字节缓冲输入流:BufferedInputStream

    我要从文件里面读取数据

    package com.oracle.demo02;
    
    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class Demo02 {
    	   public static void main(String[] args) throws IOException {
    		//明确数据源(读)把TXT文件里的内容读取出来
    		  FileInputStream fis=new FileInputStream("D:\java\hello.txt");
    		//创建字节输入缓冲流
    		  BufferedInputStream bis=new BufferedInputStream(fis);
    		  int len=0;
    		  while((len=bis.read())!=-1){
    			  System.out.print((char)len);
    		  }
    		  //释放资源
    		  bis.close();
    	}
    }
    

    字符缓冲流分两个:

    字符缓冲输入流:BufferedReader    eadLine(); 读取一个文本行,包含该行内容的字符串,不包含任何终止符,返回null;

    字符缓冲输出流:BufferedWriter 独有的方法newLine(); 换行符

    package com.oracle.demo02;
    
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class Demo03 {
    	   public static void main(String[] args) throws IOException {
    	   //明确目的地
    		 FileWriter fw=new FileWriter("D:\java\hello.txt",true);
    	   //创建字符缓冲输出流
    		 BufferedWriter bw=new BufferedWriter(fw);
    	   //写入字节
    		 bw.write("你好,熊大!");
    		 bw.flush();
    	   //换行
    		 bw.newLine();
    		 bw.write("我很好光头强");
    		 //释放资源
    		 bw.close();
    		 
    	}
    }
    

      

    package com.oracle.demo02;
    
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class Demo04 {
        public static void main(String[] args) throws IOException {
    		//明确数据源
        	  FileReader fr=new FileReader("D:\java\hello.txt");
           //创建字符输入缓冲流
        	  BufferedReader br=new BufferedReader(fr);
        	  String line=null;
        			  /*br.readLine();
        	  System.out.println(line);
        	  
        	  line=br.readLine();
        	  System.out.println(line);
        	  
        	  line=br.readLine();
        	  System.out.println(line);*/
              while((line=br.readLine())!=null){
            	  System.out.println(line);
              }
              //释放资源
        	  br.close();  	
    	}
    }
    

      

    eadLine()读取一个文本行,包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

  • 相关阅读:
    freak out用法
    kinda用法
    比较级与最高级
    issue用法
    invite用法
    yet用法
    follow用法
    get用法
    turn up&turn off&turn on用法
    关于document.lastModified属性
  • 原文地址:https://www.cnblogs.com/awdsjk/p/11058187.html
Copyright © 2011-2022 走看看