zoukankan      html  css  js  c++  java
  • Java基础 -- IO流

    IO流

    1.概念

    1. 流:数据传输通道

    2. 模型:采用Decorator装饰者模式。依照功能可以对流进行分类。

    2.分类

    1. 按数据流方向:

      • 输入流
      • 输出流
    2. 按传输类型:

      这4种均是抽象流,为所有IO流的超类

      • 字节流(用来处理图像,视频,PPT,Word)
        • Reader
        • Writer
      • 字符流(只能处理纯文本)
        • InputStream
        • OutputStream

      字符字节流区别:

      • 字节输出流没有缓冲区,直接输出,字符流必须经过缓冲区,正常情况下只有调用close()才会输出,否则需要手动调用flush()才可输出

        字节 字符
        读写单位 Byte 字符(根据码表映射)
        处理对象 视频,图片 纯文本(优先考虑
    3. 按功能:

      • 节点流:特定节点读取数据的过程
      • 处理流:连接和封装一个已存在的流,通过该封装流调用实现数据读写。ep:BufferedReader。处理流的构造方法传入一个流对象作参数。
    4. 字符流:Java中采用Unicode标准,字符流指基于字节流读取查询对应的Unicode表。

    3.特性

    1. FIFO,先写入的数据也先被读取
    2. 顺序存取,不可随机访问。(RandomAccessFile可从任意位置访问IO,此类继承自Object)
    3. 只读/只写,流只有一种功能,传输通道同时存在需要两个流。

    4.五类一接口

    Java.io包:

      • File:文件特征与管理,对文件系统中文件以及文件夹进行封装的对象,可通过对象的思想操作文件和文件夹,保存文件或目录的元数据信息,包括文件名,文件大小,最后修改时间,是否可读,获取文件路径,判断文件是否存在,获取当前文件列表,创建/删除文件或目录

      • InputStream

      • OutputStream

      • Reader

      • Writer

        RandomAccessFile:随机文件操作

    • 接口:Serializable

    5.IO流对象

    6.System类

    输入输出 读取方式
    System.out(标准输出) 显示器
    System.err(标准错误输出) 显示器
    System.in(标准输入) 键盘输入

    7.Scanner

    //字节流套接
    Scanner(InputStream source)
    //字符流套接
    Scanner(Readable source)
    

    8.序列化

    1. 序列化:具体对象数据 --> 二进制数据

      • 实现方法:java.io.Serializable
    2. 反序列化:二进制数据 --> 具体对象数据

      • 实现方法:Object readObject()方法从ObjectInputStream读取对象
      • 基本类型和String默认都实现了这个接口,所以不需要处理。

      • 类中的一个属性不参与序列化:transient,表示标记的属性不参与序列化。

        transient关键字:某些属性不需要保存。

        private transient String name;
        
      • static定义的变量也不参与序列化。

    3. 标记接口:Serializable,Cloneable.

      只定义了一种功能,没有具体内容。它的功能由JVM实现。

    优先使用的:

    输入流 输出流
    字节流 Scanner(首选 printStream(打印流)
    字符流 BufferReader(次选,缓冲流) printWriter(打印流)
    Scanner简单不赘述
    BufferedReader
    1. 单字符
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class BRRead {
        //单字符读写
        public static void main(String[] args) throws IOException {
            char c;
            //使用System.in创建BufferedReader
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("输入'q'退出:");
            /*读取:读取一个字符使用read()方法
                int read() throws IOException
             */
            do{
                c = (char)br.read();
                System.out.println("退出");
            }while(c != 'q');
        }
    
    }
    
    1. 字符串

      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStreamReader;
      
      public class BRReadLine {
          //多字符读取
          public static void main(String[] args) throws IOException {
              String str;
              //System.in创建BufferedReader
              BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
              System.out.println("请输入一行字符如'end'来结束");
              /*读取一行字符
                  String readLine() throws IOException
               */
              do{
                  str = br.readLine();
                  System.out.println("您输入了一行字符,已退出");
              }while(!str.equals("end"));
          }
      }
      
      
    2. FileInputStream

      import java.io.FileInputStream;
      import java.io.FileNotFoundException;
      import java.io.IOException;
      
      public class Fileinputstream {
          public static void main(String[] args) throws IOException {
              int i = 0;
              FileInputStream fi = null;
              try {
                  fi = new FileInputStream("C:\Users\Administrator\Desktop\a.txt");
              } catch (FileNotFoundException e) {
                  System.out.println("找不到文件");
                  System.exit(-1);
              }
      
              try {
                  int num = 0;//计数
                  while((i=fi.read()) != -1){
                      System.out.println((char)i);
                      num++;
                  }
                  fi.close();
                  System.out.println("传输个数:"+num);
              } catch (IOException e) {
                  System.out.println("读取文件错误");
              }
          }
      }
      
    3. FileOutputStream

      import java.io.FileInputStream;
      import java.io.FileOutputStream;
      import java.io.IOException;
      
      public class Fileoutputstream {
          public static void main(String[] args) throws IOException {
              int i = 0;
              FileInputStream fi = null;
              FileOutputStream fo = null;
              try {
                  fi = new FileInputStream("C:\Users\Administrator\Desktop\a.txt");
                  fo = new FileOutputStream("C:\Users\Administrator\Desktop\b.txt");
                  while((i=fi.read())!=-1){
                      fo.write(i);
                      System.out.println((char)i);
                  }
                  fi.close();
                  fo.close();
                  System.out.println("文件已复制");
              } catch (IOException e) {
                  System.out.println("文件复制错误");
                  System.exit(-1);
              }
          }
      }
      
    4. Reader,Writer

      import java.io.FileReader;
      import java.io.FileWriter;
      import java.io.IOException;
      
      public class Filereaderwriter {
          public static void main(String[] args) throws IOException {
              int i = 0;
              try {
                  FileReader fr = new FileReader("C:\Users\Administrator\Desktop\a.txt");
                  FileWriter fw = new FileWriter("C:\Users\Administrator\Desktop\c.txt");
                  while((i=fr.read())!=-1){
                      fw.write(i);
                      System.out.println((char)i);
                  }
                  fr.close();
                  fw.close();
              } catch (IOException e) {
                  System.out.println("文件复制错误");
              }
          }
      }
      
  • 相关阅读:
    php内核为变量的值分配内存的几个宏
    php7 引用成为一种类型
    function参数
    execvp php-fpm reload使用的函数
    fastcgi
    php-fpm定时器
    php 类继承
    php 对象 调用静态方法
    php unset变量
    php5数组与php7数组区别
  • 原文地址:https://www.cnblogs.com/bwxx/p/13174450.html
Copyright © 2011-2022 走看看