JAVA-I/O(1)

一,I/O

  定义:基于数据流的输入和输出;

      数据流:表示字符或字节数据的流动序列;

         一组有序,有起点和终点的数据序列,分为输入流和输出流;

         数据写入时:将数据分段按照一定的顺序组成数据流写入数据流管道;

         数据读取时:将数据流管道中的数据流按照先后顺序按照自定义大小进行读取;

         数据读取途径:内存,文件,网络连接

      数据流分类:

           字节流:数据流中最小的数据单元字节,二进制数据
         字符流:数据流中最小的数据单元字符,java采用Unicode编码,一个字符占两个字节

二,I/O主要类和接口

  1,类:File, InputStream OutputSteam, Reader, Writer

  2,接口:Serializable   

三,I/O层次

  1,流式 : InputSteam, OutputSteam, Reader, Writer等  

  2,非流式 : File, RandomAccessFile, FileDescriptor等

  3,其他:读取安全相关的类,如:SerializablePermission

        读取本地操作系统相关的类:如:FileSystem, Win32FileSystem, WinNTFileSystem

  主要类:

    【1】File:(文件特征和管理)

          用于文件和目录的描述信息;如生成目录, 修改文件名, 删除文件, 判断文件所在路径

    【2】InputStream:(字节流,二进制格式操作; 抽象类)

          用于字节的输入操作;   所有输入流的父类,定义了所有输入流的共同特征;

    【3】OutputStream:(字节流,二进制格式操作; 抽象类)

          用于字节的输出操作;   所有输出流的父类,定义了所有输出流的共同特征;

    【4】Reader:(字符流,文本格式操作; 抽象类)

          用于字符的输入操作;

    【5】Writer:(字符流,文本格式操作; 抽象类)

          用于字符的输出操作;

    【6】RandomAccessFile:(随机文件操作)

          用于从文件的任意位置进行输入输出操作;

      

  

四,I/O流    

   1,JAVA的I/O含有4个基本类:InputStream, OutputSteam, Reader, Writer;分别处理输入输出流;

  

  脑图:

  

    2,按照来源或去向分类

      【1】,File(文件)

          FileInputStream, FileOutputStream, FileReader, FileWriter

      【2】,byte[](字节数组)

          ByteArrayInputStream, ByteArrayOutputStream

      【3】,char[](字符数组)

          CharArrayReader, CharArrayWriter

      【4】,String(字符串)

          StringBufferInputStream, StringReader, StringWriter

      【5】,网络数据流

          InputStream, OutputStream, Reader, Writer  

五,选择IO流

  【1】,输入还是输出

      输入:InputStream, Reader

      输出:OutputStream, Writer

  【2】,操作数据是否纯文本

      文本:Reader, Writer

      非文本:InputStream, OutputStream

  【3】,具体操作类型 

      1,文件

        读:FileInputStream, Reader

        写:FileOutputStream, Writer

      2,数组  

        byte[ ]:ByteArrayInputStream, ByteArrayOutputStream

        char[ ]:CharArrayReader, CharArrayWriter

      3,String

        StringReader, StringWriter

      4,Socket

        键盘:用System.in(是一个InputStream对象)读取,用System.out(是一个OutoutStream对象)打印

      5,是否转换流

        InputStreamReader,OutputStreamWriter

      6,是否需要缓冲提高效率

        加上Buffered:

        BufferedInputStream, BufferedOuputStream, BufferedReader, BufferedWriter

六,示例数据流操作      

   1,将键盘输入进行输出

     //1-获取键盘输入的字节流
        InputStream inputStream = System.in;
        //2-字节流转字符流
        Reader reader = new InputStreamReader(inputStream);
        //4-将字符流进行缓存
        BufferedReader  in = new BufferedReader(reader);
        //5-读取字符流
        char ar;
        while((ar = (char)in.read()) != -1){
            System.out.println(ar);
        }

   2,读取文件内容

     方式一:

     //1-获取文件的字符输出流
        Reader reader = new FileReader("c:\MainTest.java");
        //2-将字符输出流进行缓存
        BufferedReader bufferedReader = new BufferedReader(reader);
        //3-读取字符输出流
        String str;
        while((str = bufferedReader.readLine()) != null){
            System.out.println(str);
        }

       方式二:

     //1-获取文件的字符输出流
        FileReader reader = new FileReader("c:\MainTest.java");
        //2-输出字符输出流
        int b;
        while((b = reader.read()) != -1){
            System.out.print((char)b);
        }

     方式三:

     //1-获取文件的字符输入流
        FileInputStream in = new FileInputStream("c:\MainTest.java");
        //2-将输入流写入字节数组,将字节数组转字符串输出
        int n = 1024;
        byte[] buffer = new byte[n];
        while((in.read(buffer)) != -1){
            System.out.println(new String(buffer));
        }

  3,文件拷贝

     //1-获取A文件的字符输入流流,和B文件的字符输出流
        FileInputStream in = new FileInputStream("d:\MainTest.java");
        FileOutputStream out = new FileOutputStream("d:\copy.txt");
        
        //2-将A文件字符输入流写入B文件
        int b;
        while((b = in.read()) != -1){
            out.write(b);
        }
        
        //3-关闭资源
        out.flush();
        in.close();
        out.close();

  4,将键盘输入写入文件

     //1-获取字节输入流,文件字符输出流
        Scanner in = new Scanner(System.in);
        FileWriter out = new FileWriter("d:\Content.txt");
        //2-将字节输入流写入文件
        String s;
        while(!(s = in.nextLine()).equals("Q")){
            out.write(s + "
");
        }
        //3-关闭资源
        out.flush();
        in.close();
        out.close();

    

原文地址:https://www.cnblogs.com/wanhua-wu/p/6660476.html