Java流(Stream)、文件(File)和IO

发布时间 2023-10-13 14:53:25作者: 1999LIJIAN

Java流(Stream)、文件(File)和IO

Java流(Stream)、文件(File)和IO

  • java.io包几乎包含了所有操作输入、输出需要的类
    • 所有这些流类流类代表了输入源和输出目标
  • Java.io包中的流支持很多种格式
    • 比如:基本类型、对象、本地化字符集等等
  • 一个流可以理解为一个数据的序列
    • 输入流表示从一个源读取数据
    • 输出流表示向一个目标写数据
  • Java为I/o提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程

读取控制台输入

  • Java的控制台输入由System.in完成

    • 为了获得一个绑定到控制台的字符流,可以把System.in包装在一个BufferedReader对象中来创建一个字符流

      • 创建BufferedReader的基本语法:

        BufferedReader br = new BufferedReader(new  InputStreamReader(System.in));
        
        • BufferedReader 对象创建后,可以使用read() 方法从控制台读取一个字符或者用readLine() 方法读取一个字符串

从控制台读取多字符输入

  • 从BufferedReader对象读取一个字符要使用read() 方法

    • 语法: int read throws IOException

      • 每次调用read() 方法,从输入流读取一个字符并把该字符作为整数值返回

      • 当流结束的时候返回-1

      • 该方法抛出IOException

    • 使用BufferedReader 在控制台读取字符 例子

      //使用BufferedReader在控制台读取字符
      
      import java.io.*;
      public class BRRead{
      public  static void main(String[] args){
      char c;
      //使用System.in 创建BufferedReader
      BudderedReader br = new BufferedReader(new InputStreamReader(System.in));
      System.out.println(“输入字符,按下q键退出”);
      do{
      c=(char) br.read();
      System.out.println(c);
      }while (c!=’q’);
      }
      }
      

从控制台读取字符串

  • 从标准输入读取一个字符串需要使用BufferedReader的reaLine()方法

    • 语法:String readLine() throws IOException

      使用BufferedReader 在控制台读取字符 例子
      //使用BufferedReader在控制台读取字符
      impor  java.io.*;
      public class BRReadLines{
      public static void main(String[] args)  throws IOException{
      //使用System.in 创建BufferedReader
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in);
      String str;
      System.out.println(“Enter lines of text.”);
      System.out.println(“Enter ‘end’ to quit.”);
      do{
      Str = br.readLine();
      System.out.println(str);
      }while(!str.equals(“end”));                                                                                                                                         
      }
      }     
      

控制台输出

  • 控制台的输出由 print() 和 println() 完成

    • 这些方法都由类PrintStream定义
    • System.out是该对象的一个引用
  • PrintStream继承了OutputStream类,并且实现了方法write();Write()也可以用来往控制台写操作

    • PrintStream定义write()的最简单格式:

      • Void write(int byteval)

        • 该方法将byteval的低八位字节写到流中

        • 实例:用write()把字符”A”和紧跟着的换行符输出到屏幕:

          import  java.io.*;
          //演示System.out.write()
          public class WriteDemo{
          public static void main(String [] args){
          int b;
          b = ‘A’;
          System.out.write(b);
          System.out.write(‘\n’);
          }
          }
          

读写文件

  • 一个流被定义一个数据序列
    • 输入流用于从源读取数据
    • 输出流用于向目标写数据
  • 两个重要的流FilelnputStream和FileOutputStream

FilelnputStream

  • 该流用于从文件读取数据,FilelnputStream的对象可以用关键字new来创建

  • 有多种构造方法可用来创建对象

    • 可以使用字符串类型的文件名来创建一个输入流对象来读取文件

      InputStream  f =new FileInputStream(“C:/java/hello”);
      
    • 也可以使用一个文件对象来创建一个输入流对象来读取文件

    • 首先得使用File()方法来创建一个文件对象

      File  f  = new File(“C:/java/hello”);
      InputStream  in = new FileInputStream(f); 
      
  • public void close() throws IOException{}

    • 关闭此文件输入流并释放与此流有关的所有系统资源
    • 抛出IOException异常
  • protected void finalize() throws IOException{}

    • 方法清除与该文件的连接
    • 确保在不再引用文件输入流时调用其close方法
    • 抛出IOException异常
  • public int read(int r) throws IOException{}

    • 这个方法从InputStream对象读取指定字节的数据
    • 返回为整数值
    • 返回下一个字节数据,如果已经到结尾则返回-1
  • public int read (byte[] r) throws IOException{}

    • 这个方法从输入流读取r.length长度的字节
    • 返回读取的字节数
    • 如果是文件结尾则返回-1
  • Public int available() throws IOException{}

    • 返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取的字节数
    • 返回一个整数值

FileOutputStream