• 六IO流技术


    IO流技术

    IO流的基本概念

       ·流的原理

    1. 在java程序中,对于数据的输入输出操作以“流”(stream)方式进行;
    2. J2SDK提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据;
    3. java的流类型一般位于java.io包中

       ·流的概念

      数据源:1.data source. 提供原始数据的原始媒介。常见的:数据库、文件、其他程序、内存、网络连接、IO设备。

          2.数据源就像水箱,流就像水管中流着的水流,程序就是我们最终的用户。流是一个抽象、动态的概念,是一连串连续动态的数据集合。

    流的细分和体系_四大抽象类

       ·流的分类

      流的方向:1.输入流:数据源到程序(InputStream、Reader读进来)

           2.输出流:程序到目的地(OutPutStream、Writer写出去)

      处理数据单元:1.字节流:按照字节读取数据(InputStream、OutputStream)

             2.字符流:按照字符读取数据(Reader、Writer)

      注意:输入输出是相对于程序而言,而不是相对于源和目标而言。

      功能不同:1.节点流:可以直接从数据源或目的地读写数据。

           2.处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。目的主要是简化操作和提高性能。

      节点流和数据流的处理关系:1.节点流处于io操作的第一线,所有操作必须通过他们进行;

                   2.处理流可以对其他流进行处理(提高效率或操作灵活性)

       ·IO流的体系

      InputStream和OutputStream:java语言中最基本的两个字节输入输出类。

                   其他所有字节输入输出流类都继承自这两个基类。

                   这两个类都是抽象类,不能创建它们的实例,只能使用它们的子类。

      Reader和Writer:java语言中最基本的两个字符输入输出类。

    文件字节流

       ·FileInputStream/FileOutputStream

      使用FileInputStream读取文件内容

      1.abstract int read();

     1 package com.zqf.ioproject;
     2 
     3 import java.io.File;
     4 import java.io.FileInputStream;
     5 import java.io.FileNotFoundException;
     6 import java.io.IOException;
     7 
     8 public class TestInputStream {
     9     public static void main(String[] args) throws IOException {
    10         //(1)数据源与应用程序之间搭建管理(通过创建对象)
    11         FileInputStream fis = new FileInputStream(new File("C:\test.txt"));
    12         //(2)从数据源开始向程序中读数据
    13         int count = fis.available();        //统计文件中字符的个数
    14         System.out.println(count);
    15         //中转站比较小,一次读一个字节
    16         //System.out.println(fis.read( ));    //读取一个字节
    17         //System.out.println(fis.available());
    18         int buf = 0;    //存储读到的字节
    19         while((buf=fis.read())!=-1){
    20             System.out.println((char)buf);
    21         }
    22         //(3)关闭
    23         fis.close();
    24     }
    25 }

      2.int read(byte b[]);

     1 package com.zqf.ioproject;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.FileNotFoundException;
     5 import java.io.IOException;
     6 
     7 public class TestInputStream2 {
     8     public static void main(String[] args) throws IOException {
     9         //(1)搭桥
    10         FileInputStream fis = new FileInputStream("C:\test.txt");
    11         //(2)创建大一些的中转站
    12         byte [] buf = new byte[1024];
    13         int len = 0;    //用于存储每次读到的实际字符
    14         while((len=fis.read(buf))!=-1){
    15             //借助String类构造方法
    16             System.out.println(new String(buf,0,len));
    17         }
    18         //(3)关闭
    19         fis.close();
    20     }
    21 }

      3.int read(byte b[],int off,int len);

      4.int available();

      5.close();

      使用FileOutputStream写内容到文件 

      1.abstract void write(int b);

      2.void write(byte b[]);

      3.void write(byte b[],int off,int len);

      4.void flush();

      5.void close()

     1 package com.zqf.ioproject;
     2 
     3 import java.io.FileNotFoundException;
     4 import java.io.FileOutputStream;
     5 import java.io.IOException;
     6 
     7 public class TestOutputStream {
     8     public static void main(String[] args) {
     9         //(1)搭桥
    10         FileOutputStream fos=null;
    11         try {
    12             fos = new FileOutputStream("C:\test.txt");
    13             //(2)写数据,一次写一个字节
    14             //fos.write(97);
    15             //(3)一次写多个字节
    16             byte[] buf ="helloworld".getBytes();
    17             fos.write(buf);
    18         } catch (FileNotFoundException e) {
    19             // TODO Auto-generated catch block
    20             e.printStackTrace();
    21         } catch (IOException e) {
    22             // TODO Auto-generated catch block
    23             e.printStackTrace();
    24         }finally{
    25             //(3)关闭
    26         try {
    27             if(fos!=null){
    28                 fos.close();
    29             }
    30         } catch (IOException e) {
    31             // TODO Auto-generated catch block
    32             e.printStackTrace();
    33         }
    34         }
    35     }
    36 }

    使用字节流实现文件复制

       ·文件复制的原理

       ·文件复制的代码实现

     1 package com.zqf.ioproject;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.FileNotFoundException;
     5 import java.io.FileOutputStream;
     6 import java.io.IOException;
     7 
     8 public class TestFileCopy {
     9     public static void main(String[] args) {
    10         //数据源是文件
    11         FileInputStream fis=null;
    12         //目的地
    13         FileOutputStream fos;
    14         try {
    15             fis = new FileInputStream("D:\test.txt");
    16             fos = new FileOutputStream("C:\target.txt");
    17             
    18             byte [] buf=new byte[1024];        //中转站
    19             int len=0;    //用于存储每次读到的字节个数
    20             while((len=fis.read(buf))!=-1){
    21                 fos.write( buf,0,len);
    22             }
    23             
    24             /*int b=0;//用于存储读到的字节,(中转站)
    25             while ((b=fis.read())!=-1){
    26                 //写入文件
    27                 fos.write(b);
    28             }*/
    29         } catch (FileNotFoundException e) {
    30             // TODO Auto-generated catch block
    31             e.printStackTrace();
    32         } catch (IOException e) {
    33             // TODO Auto-generated catch block
    34             e.printStackTrace();
    35         }finally{
    36         //关闭
    37         try {
    38             if(fis!=null){
    39                 fis.close();
    40             }
    41         } catch (IOException e) {
    42             // TODO Auto-generated catch block
    43             e.printStackTrace();
    44         }
    45         }
    46     }
    47 }

    文件字符流

       ·Reader/Writer

      使用Reader读取文件内容

    1. int read();
    2. int read(char [] cbuf);
    3. int read (char [] cbuf,int off,int len);
    4. int available();
    5. close();
       1 package com.zqf.reader;
       2 
       3 import java.io.FileNotFoundException;
       4 import java.io.FileReader;
       5 import java.io.IOException;
       6 
       7 public class TestFileReader {
       8     public static void main(String[] args) throws IOException {
       9         //(1)搭桥
      10         FileReader reader = new FileReader("C:\test.txt");
      11         //(2)读取
      12         //int b = reader.read();         //读到的字符的int类型数据
      13         //System.out.println((char)b);
      14         /*int b=0;    //用于存储每次读到的字符数据的整数值
      15         while ((b=reader.read())!=-1){
      16             System.out.println((char)b);
      17         }*/
      18         
      19         char [] cbuf = new char[1024];
      20         int len = 0;    //用于存储读到的字符的个数
      21         while((len=reader.read(cbuf))!=-1){
      22             System.out.println(new String (cbuf,0,len));
      23         }
      24         //(3)关闭
      25         reader.close();
      26     }
      27 }

       ·使用Writer写内容到文件

    1. void write(int c);
    2. void write(char[] cbuf);
    3. abstract void write(char [] cbuf,int off,int len);
    4. void write(String str);
    5. abstract void flush()
     1 package com.zqf.writer;
     2 
     3 import java.io.FileWriter;
     4 import java.io.IOException;
     5 
     6 public class TestWriter {
     7     public static void main(String[] args)  {
     8         //创建对象
     9         FileWriter writer=null;
    10         try {
    11             writer = new FileWriter("C:\a.txt");
    12             //写数据
    13             writer.write("你好吗?");    //写到缓冲区中
    14         } catch (IOException e) {
    15             // TODO Auto-generated catch block
    16             e.printStackTrace();
    17         }finally{
    18         //关闭
    19             if(writer!=null){
    20                 try {
    21                     writer.close();
    22                 } catch (IOException e) {
    23                     // TODO Auto-generated catch block
    24                     e.printStackTrace();
    25                 }
    26             }
    27         }
    28     }
    29 }
  • 相关阅读:
    hdu1072 逃离迷宫系列 bfs
    hdu1495 倒水bfs
    hdu 1548 A strange lift (bfs)
    hdu1728 逃离迷宫bfs
    hdu1548 奇怪的电梯 dfs dijkstra bfs都可以,在此奉上dfs
    delphi 窗体的位置和高宽度-TForm:Letf、Top、Width、Height、ClientWidth、ClientHeight
    Delphi 鼠标控制函数GetCursorPos、SetCursorPos
    Delphi CoCreateGuid()函数 获取GUID
    Delphi出现“borland license information was found,but it is not valid for delphi”的错误,无法运行的解决方法
    一维条形码生成与识别技术
  • 原文地址:https://www.cnblogs.com/zqfdgzrc/p/10651170.html
Copyright © 2020-2023  润新知