zoukankan      html  css  js  c++  java
  • 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();

        

  • 相关阅读:
    1225. 岛的周长
    238. Product of Array Except Self除自身以外数组的乘积
    RxJava--Buffer,GroupBy 对比
    RxJava--Buffer,GroupBy 对比
    HDU-2182-Frog
    HDU-2182-Frog
    Linux下必知必会文件和目录
    Linux下必知必会文件和目录
    获取一篇新闻的全部信息
    获取一篇新闻的全部信息
  • 原文地址:https://www.cnblogs.com/wanhua-wu/p/6660476.html
Copyright © 2011-2022 走看看