java中I/O理解

I/O体系图

I/O流使用对照图

注:粗体为节点流。蓝色为转换流(字节流转为字符流)。

流的理解

数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。 数据写入程序可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流。

简而言之:数据流是一组有序,有起点和终点的字节的数据序列。包括输入流和输出流。

当程序需要读取数据的时候,就会建立一个通向数据源的连接,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会建立一个通向目的地的连接。

流处理分类

节点流:可以从或向一个特定的地方(节点)读写数据。如FileInputStream、FileReader。

处理流:是对一个已存在的流的连接和封装(就犹如在水管中添加了一个过滤器对水的处理),通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。 一个流对象经过其他流的多次包装,称为流的链接

I/O流的操作

1. 操作规律

1、明确源和目的。
   数据源:就是需要读取,可以使用两个体系:InputStream、Reader;
   数据汇:就是需要写入,可以使用两个体系:OutputStream、Writer;
   2、操作的数据是否是纯文本数据?
   如果是:数据源:Reader
           数据汇:Writer 
   如果不是:数据源:InputStream
             数据汇:OutputStream
   3、虽然确定了一个体系,但是该体系中有太多的对象,到底用哪个呢?
   明确操作的数据设备。
   数据源对应的设备:硬盘(File),内存(数组),键盘(System.in)
   数据汇对应的设备:硬盘(File),内存(数组),控制台(System.out)。
   4、需要在基本操作上附加其他功能吗?比如缓冲。
   如果需要就进行装饰。
    /记住,只要一读取键盘录入,就用这句话。
    BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
    BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

2.输入流操作

  • 读取磁盘的文件

      //对磁盘文件读的操作
      public static void fileInput() throws FileNotFoundException {
          // 创建输入流
          FileInputStream fis = null;
          // 创建转换流
          InputStreamReader isr = null;
          // 创建缓冲流
          BufferedReader br = null;
    
          try {
              fis = new FileInputStream("E:/test.txt");
              isr = new InputStreamReader(fis);
              br = new BufferedReader(isr);
    
              String line = null;
              // 按行读取文件
              while ((line=br.readLine()) != null) {
                  System.out.println(line);
              }
          }catch (Exception e) {
              e.printStackTrace();
          }
      }
        
    
       //* 读取磁盘下多个文件遍历输出
      public static void fileListInput() throws IOException {
          // 创建路径
          File file = new File("e:/test");
          // 读取该文件夹多有文件
          File[] files = file.listFiles();
    
          // 创建输入流
          BufferedReader br = null;
          // 遍历输出
          for (File file1 : files) {
              try {
                  br = new BufferedReader(new InputStreamReader(new FileInputStream(file1)));
                  String str = null;
                  while ((str=br.readLine()) != null) {
                      System.out.println(str);
                  }
    
              } catch (FileNotFoundException e) {
                  e.printStackTrace();
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
    
          br.close();
      }
    

4.输出流操作

  • 将文本写到磁盘
    
           //* 读取磁盘下多个文件遍历输出
          public static void fileListInput() throws IOException {
              // 创建路径
              File file = new File("e:/test");
              // 读取该文件夹多有文件
              File[] files = file.listFiles();
        
              // 创建输入流
              BufferedReader br = null;
              // 遍历输出
              for (File file1 : files) {
                  try {
                      br = new BufferedReader(new InputStreamReader(new FileInputStream(file1)));
                      String str = null;
                      while ((str=br.readLine()) != null) {
                          System.out.println(str);
                      }
        
                  } catch (FileNotFoundException e) {
                      e.printStackTrace();
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
        
              br.close();
          }
    

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦