java的Io流的简答总结以及实现

一、字符与字节

 字符指类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。字符是电子计算机或无线电通信中字母、数字、符号的统称,其是数据结构中最小的数据存取单位,通常由8个二进制位(一个字节)来表示一个字符。 [1]  字符是计算机中经常用到的二进制编码形式,也是计算机中最常用到的信息形式。

                                                                                                                                                                       ---百度百科

字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。最常用的字节是八位的字节,即它包含八位的二进制数。

                                                                                                                                                                          ---百度百科

不同的编码字符与字节的数量对应不同(这里指的是英文字符之外的文字,比如汉字),例如GB2312编码或者GBK编码中一个汉字符需要2个字节,而UTF-8编码中需要3-4个字节

import java.io.UnsupportedEncodingException;

public class CharBig {
 public static void main(String[] args) {
	String eString="测试";
	byte[] bytes = null;
	try {
		bytes = eString.getBytes("UTf-8");//使用UTF-8进行解码
		System.out.println("字节的长度"+bytes.length);
	} catch (UnsupportedEncodingException e) {
		// TODO 自动生成的 catch 块
		e.printStackTrace();
	}
	try {
		bytes=eString.getBytes("GBK");//使用GBK进行解码
		System.out.println("字节的长度"+bytes.length);
	} catch (UnsupportedEncodingException e) {
		// TODO 自动生成的 catch 块
		e.printStackTrace();
	}
	
	
	
}
}

实现结果:

二、IO流

IO流分为字节流和字符流,输入流和输出流是相对于程序而言的,就好比你的电脑上被插上了一根水管,那么输入流相当于水管子里面流出水,输出流相当于你的电脑往水管子里流水(有点不恰当哈)

 

 

   

四大步 1、 File file =new File(文件路径)  ---接一头
           2   InpuStream inputStream=new FileInputStream(file);---接好另一头
           3    read(数组)--放水
           4  close()----拔管子 

 

目录

一、字符与字节

二、IO流

 

一、字节流(通常后面带着Stream)

 一、InputStream

      一、FileInputStream

    二、BufferedInputStream

二、OutputStream

   一、FileOutputStream

       二、BufferedOutputStream

 二、字符流(通常后面带着Reader或者writer)

   一、Reader

    一、InputStreamReader

     二、FileReader

     三、BufferedReader

    二、Writer()

        一、OutputStreamWriter

        二、FileWriter

        三、BufferedWriter


一、字节流(通常后面带着Stream)

 一、InputStream

 InputStream为抽象的基类,

  read(byte[] b):从流中读取b的长度字节的数据存储到b中,返回的结果为实际读取的字节的个数,如果返回的为-1,那么代表到了结尾。

   read(byte[] b,int off,int len): 在off位置开始,从流中读取长度为Len个字节的数据存储到b中,返回的结果为实际读取到的字节的个数,如果返回-1,那么代表到了结尾。

    close():代表了关闭流资源(就是把水管拔掉)

   skip(n):跳过和丢弃n个字节(不会回头的)

      一、FileInputStream

       一看名字就是知道主要使用了操作文件的,它实现了基类InputStream中的

read()函数:从流中读取一个字节,返回的结果为int,如果编码是一个一个字节的,可以尝试的强转为char来查看。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class CharBig {
 public static void main(String[] args) throws IOException {
	 InputStream inputStream=new FileInputStream(new File("e:/test.txt"));
	 int data;
	 //一个一个字符读
	   while(    (data=inputStream.read())!=-1)
	  {
	 	System.out.print((char)data);
	   }
	   System.out.println();
    	 inputStream.close();//关闭资源流  ,拔掉水管
      byte[] b=new byte[5];
      inputStream=new FileInputStream(new File("e:/test.txt"));
      int len;
      //读取数据到byte数组中
      while((len=inputStream.read(b))!=-1)
      {  
    	  System.out.println(new String(b,0,len));
      }
      inputStream.close();//关闭资源流  ,拔掉水管
 }
 
}

  实现结果:

  

    二、BufferedInputStream

 BufferedInputStream相当于先将流中的数据缓冲到内存中,然后再取数据,这样的比从硬盘中取数据效率要高出许多(Buffered 是缓冲的意思),那么它需要一个流一般是FileInputStream流。

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class CharBig {
 public static void main(String[] args) throws IOException {
	 InputStream inputStream=new BufferedInputStream(new FileInputStream("e:/test.txt"));
	 byte[] b=new byte[10];
	   int len=0;
	   while((len=inputStream.read(b))!=-1)
	   {
		     System.out.println(new String(b,0,len) );
	   }
          inputStream.close();
 }
 
}

 

二、OutputStream

  OutputStream是将字节流写到文件中去的父类,它定义的函数有

            write(byte[] b):将b的长度个字节数据写到输出流中。

            write(byte[] b,int off,int len):从b的off位置开始,获取len个字节数据,写到输出流中

            flush():刷新输出流,把数据马上写到输出流中

           close():关闭流,释放系统资源

   一、FileOutputStream

          实现了write(int b)将b转化为一个字节数据写到文件中去

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class CharBig {
 public static void main(String[] args) throws IOException {
    File file=new File("e:/test.txt");
    OutputStream outputStream=new FileOutputStream(file);
   //这里表示不追加写,直接覆盖,如果想要在原来的文件上追加数据的话,那么就再加个true
    String cString="hello world";
    outputStream.write(cString.getBytes());
 
    outputStream.close();
 }
 
}

       二、BufferedOutputStream

                        同样的将数据存储到内存中,然后流出

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class CharBig {
 public static void main(String[] args) throws IOException {
    File file=new File("e:/test.txt");
    OutputStream outputStream=new FileOutputStream(file,true);
    BufferedOutputStream bufferedInputStream=new BufferedOutputStream(outputStream);
    String cString="hello world";
    bufferedInputStream.write(cString.getBytes());
    //这里表示不追加写,直接覆盖,如果想要在原来的文件上追加数据的话,那么就write(cString.getBytes(),true);
    bufferedInputStream.close();
    outputStream.close();
 }
 
}

 二、字符流(通常后面带着Reader或者writer)

   一、Reader

 Reader是字符类输入流的抽象类,它定义了如下函数(主要)

        reader():读取单个字符,返回结果是一个int,需要转成char;到达流的末尾时,返回-1

        read(char[] cbuf):读取cbuf的长度个字符到cbuf这种,返回结果是读取的字符数,到达流的末尾时,返回-1

         close()  :关闭流,释放占用的系统资源。

    一、InputStreamReader

          可以将InputStream按照其编码方式的字节流转化为字符流,此外它还实现reader(char[] c int offset, int length):

              从offset开始,读取length个字符到数组c中

  BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(new FileInputStream(new File(pathname))));
             //字节流转化为字符流,使用了  InputStreamReader作为中间的桥梁,一边是BufferedReader(字符) 另一边是FileInputStream(字节流)
//同样的可以设置编码格式

 

     二、FileReader

                可以把FileInputStream中的字节数据转成根据字符编码方式转成字符数据流

     三、BufferedReader

                     reader(char [] c int offset, int length):  从offset开始,读取length个字符到数组c中

                       readLine() :读取文本行,以行结束符作为末尾,返回的是字符串,如果已经到达流的末尾,则返回null

 


import java.awt.TexturePaint;
import java.awt.event.MouseWheelEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;

public class CharBig {
 public static void main(String[] args) throws IOException {
      // classLoader=this.getClass().getClassLoader();
		 // 	 filepath=classLoader.getResource("").getPath();
	 //可以使用相对路径
	 InputStreamReader   inputStreamReader=new InputStreamReader(new FileInputStream("e:/test.txt")); 
     int ch;
     while((ch=inputStreamReader.read())!=-1)
     {  
    	 System.out.print((char)ch);//汉字也可以哦,因为它是按照一个一个字符读取的,也就是一个字一个字读取的
     }
     inputStreamReader.close();
     //向文件中追加内容
     FileOutputStream fileOutputStream=new FileOutputStream(new File("e:/test.txt"));
     String cString="张弟弟";
     byte []b=cString.getBytes();
     fileOutputStream.write(b);
     fileOutputStream.close();
          //使用BuffereReader
    
     BufferedReader bufferedReader=new BufferedReader(new FileReader(new File("e:/test.txt"))) ;
     String data=new String();
     
     while((data=bufferedReader.readLine())!=null)
     {System.err.println(data);
            data="";
    	 
     }
     bufferedReader.close();
     
 }
 
}

    

从键盘输入流中读取数据

 //获取键盘输入流
     BufferedReader bufferedReader2=new BufferedReader(new InputStreamReader(System.in));
     //获取键盘输入流  推荐使用它
     Scanner sc = new Scanner(System.in);
         int c=sc.nextInt();
     String b1=sc.next();

    二、Writer()

       同样是抽象类,字符流,主要定义了如下方法 

           write(char [] c):往输出流中写入一个字符数组

          write(int c):往输出流中写入一个数字

         write(String c):往输出流中写入一个字符串

          write(String c,int off,int len):往输出流中写入字符串的一部分,起始处为off,长度为len

        close():关闭流

             flush():立马写入流中,甭管长度够不够

        一、OutputStreamWriter

                OutputStreamWriter流的作用就是利用字节流作为底层输出流然后构建字符输出流,字符输出流输出字符到流中,然后通过指定的字符集把流中的字符编码成字节输出到字节流中,其作用就是一个桥梁,使得双方链接起来。

   (将字节转化为字符,将字符转化为字节)

     OutputStreamWriter需要一个输入流对象作为实例化参数   ,一般选用FileOutPutStream

        二、FileWriter

       此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter       (我哭了)                                                                            ----百度百科

        三、BufferedWriter

              bufferedWriter需要一个输入流对象作为实例化参数,一般选用FileWriter

             newLine() :写入一个换行符

  

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class CharBig {
 public static void main(String[] args) throws IOException {
	 File file=new File("E:/test.txt");
	   OutputStreamWriter outputStream=new OutputStreamWriter(new FileOutputStream(file));
	   outputStream.write("hello world");
	   outputStream.flush();
	   outputStream.close();
      FileWriter fileWriter=new FileWriter(file,true);
      BufferedWriter fBufferedWriter=new BufferedWriter(fileWriter);
      fBufferedWriter.write("张弟弟");    
      fBufferedWriter.flush();
      fBufferedWriter.close();
      fileWriter.close();
      //读取数据
      BufferedReader fileReader=new BufferedReader(new FileReader(file));
     char[] b=new char[10];
     int leng;
      while((leng=fileReader.read(b))!=-1)
      {

    	 System.out.println(new String(b,0,leng));
      }
      
     
 }    
 
}

(先写这么多,眼都扛不住了)

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值