美文网首页
IO输入/输出流(二)

IO输入/输出流(二)

作者: 菜鸟要逆袭 | 来源:发表于2018-07-13 23:12 被阅读0次

前言:

Java中对数据进行持久化操作

字节流:

java中具体到文件中的数据将会使用到输入/输出流

  • 1 字节输出流OutputStream的写入
    定义:java.io.OutputStream是抽象类,是所有字节(B,1B=8bit)输出流的超类,作用为从Java程序中写出文件,后面将以其实现类FileOutputStream为例作介绍
    FileOutputStream类的构造方法.png
public class FileOutputStream Demo{
  public static void main(String[] args){
    
    /*
    *流对象的构造方法,可以创建新文件,如果文件本就存在,则会直接覆盖原有文件!!!
    */

    // 1.创建字节数出流的子类对象(FileOutputStream),绑定数据目的(要生成的文件)
    FileOutputStream fos =  new FileOutputStream("c:\\test.txt");

    // 2.调用流对象的write()方法进行写操作
    fos.write(100);//写入一个字节,输出结果根据ASCII表对应为"d"
    byte[] bytes = {65,66,67,68};
    fos.write(bytes);//写入一个字节数组,输出结果根据ASCII表对应为"ABCD"
    fos.write(bytes,1,2);//写入部分字节,输出结果根据ASCII表对应为"BC"
    fos.write("ABCD".getBytes());//直接写入字符串,利用getBytes()方法,将字符串自动转换为字节数组,输出结果根据ASCII表对应为"ABCD"

    // 3.调用流对象的close()方法释放资源(因为其实质为利用操作系统的读/写流)
    fos.close(); 
    }
}

附ASCII表

ACSII表.jpg
  • 2 字节输出流OutputStream的续写及换行
public class FileOutputStream Demo{
  public static void main(String[] args){
    File file = new File("c:\\test.txt");
    FileOutputStream fos =  new FileOutputStream(file,true);//true代表续写
    fos.write("ABCD\r\n".getBytes());//写入一个字节数组,输出结果根据ASCII表对应为"ABCD"
    fos.write("\r\n".getBytes());//"\r\n即为换行符"
    fos.write("EFGH".getBytes());
    fos.close(); 
    
  }
}
  • 3 字节输入流InputStream的读取
    定义:java.io.InputStream是抽象类,是所有字节(B,1B=8bit)输入流的超类,作用为从Java程序中写出文件,后面将以其实现类FileInputStream为例作介绍
    FileInputStream类的构造方法.png.png
public class FileInputStream Demo{
  public static void main(String[] args){
    // 1.创建字节输入流的子类对象(FileInputStream),绑定数据源(要读取的文件)
    FileInputStream fis =  new FileInputStream("c:\\test.txt");//test.txt中内容为"abcde"

    // 2.调用流对象的读取方法进行写操作
    // 2.1 调用read()方法
    int i = fis.read();//read()方法每执行一次只读取一个字节,并会自动读取到下一字节处,读取到文件结尾会返回"-1",可采用下面的while循环进行字节读取
    int len=0;
    while((len = fis.read()) ! = -1){
      System.out.println((char)len);
    }
    // 2.2调用read(byte[] b)方法
    byte[] b = new byte[2];//数组起到缓冲作用,控制长度可以提高效率
    int len2 = fis.read(b);//读取到的有效的字节数
    System.out.println(new String(b));//输出结果为"ab"
    System.out.println(len2);//输出结果为"2"
    int len2 = fis.read(b);
    System.out.println(new String(b));//输出结果为"cd"
    System.out.println(len2);//输出结果为"2"
    int len2 = fis.read(b);
    System.out.println(new String(b));//输出结果为"ed"
    System.out.println(len2);//输出结果为"1"
    int len2 = fis.read(b);
    System.out.println(new String(b));//输出结果为"ed"
    System.out.println(len2);//输出结果为"-1"
    //可以根据控制byte数组长度,以及判断读取到的有效字节数是否等于数组长度来进行读取,从而提高效率    

    // 3.调用流对象的close()方法释放资源(因为其实质为利用操作系统的读/写流)
    fis.close(); 
    }
}
  • 4 利用字节流的文件的复制
public class Copy{
  public static void main(String[] args) {
  /*
  * 此处以直接读取字节数组的形式进行文件复制(效率高)
  */
  
    //定义两个流的对象变量
    FileInputStream fis = null;
    FileOutputStream fos = null;
    try{
      //建立两个流对象,绑定数据源和数据目的
      fis = new FileInputStream("c:\\test.txt");
      fos = new FileOutputStream("d:\\test.txt");
      //读取数组,写入数组
      byte[] bytes = new byte[1024];//定义字节数组,缓冲用
      int len = 0;
      while((len = fis.read(bytes)) != -1){
        fos.write(bytes,0,length);
      }
    }catch(IOException ex){
      System.out.println(ex);
      throws new RuntimeException("文件复制失败");
    }finally{
      try{
        if(fos! = null){
          fos.close();
        }catch(IOException ex){
          throws new RuntimeException("释放fos资源失败");
        }finally{
          try{
            if(fis! = null){
              fis.close();
            }
          }catch(IOException ex){
            throws new RuntimeException("释放fis资源失败");
          }
        }
      }
    }
  }
}
  • 5 字符输出流Writer的写入
    定义:java.io.Writer是抽象类,是所有字符输出流的超类,作用为从Java程序中写出文本文件,后面将以其实现类FileWriter为例作介绍
public class WriterDemo{
  public static void main(String[] args){
    FileWriter fw = new FileWriter();
    
    //写一个字符
    fw.write("a");
    fw.flush();//字符输出流写数据的时候,必须调用flush()刷新流的缓冲
    //写一个字符数组
    char[] c = {"a","b","c"};
    fw.write(c);
    fw.flush();
    //写一个字符串
    fw.write("abc");
    fw.flush();

    fw.close();
  }
}
  • 6 字符输入流Reader的读取
public class ReaderDemo{
  public static void main(String[] args){
    FileReader fr = new FileReader ("c:\\test.txt");
    int len = 0;
    while((len = fr.read()) != -1){
      System.out.print((char)len);
    }
    fr.close();
  }
}
  • 7 利用字符流的文件的复制
public class Copy{
  public static void main(String[] args){
    FileReader fr = null;
    FileWriter fw = null;
    try{
      fr = new FileReader("c:\\test.txt");
      fw = new FileWriter("d:\\test.txt");
      char[] cbuf = new char[1024];
      int len = 0 ;
      while(( len = fr.read(cbuf)) != -1){
        fw.write(cbuf, 0, len);
        fw.flush();
      }     
    }catch(IOException ex){
      System.out.println(ex);
      throw new RuntimeException("复制失败");
    }finally{
      try{
        if(fw!=null)
        fw.close();
      }catch(IOException ex){
        throw new RuntimeException("释放资源失败");
      }finally{
        try{
          if(fr!=null)
          fr.close();
        }catch(IOException ex){
          throw new RuntimeException("释放资源失败");
        }
      }
    }
  }
}

相关文章

  • IO输入/输出流(二)

    前言: Java中对数据进行持久化操作 字节流: java中具体到文件中的数据将会使用到输入/输出流 1 字节输出...

  • Java的IO和NIO

    一、IO java的IO功能都在java.io包下,包括输入输出两种IO流,每种输入输出流又可分为字节流和字符流两...

  • Java IO流详解(一)——预备知识

    Java IO流详解(一)——预备知识 一、字符与字节 在Java中有输入、输出两种IO流,每种输入、输出流又分为...

  • java基础-day20-IO流和StringBuffer

    IO流和StringBuffer 1. IO流 1.1 IO流概述 1.2 IO流分类 1.3 文件操作输入输出字...

  • IO

    IO文件读写 输入流输出流字节流字节输入流 InputStream字节输出流 OutputStream字符流字符输...

  • Java学习Day16

    今日学习内容总结 字节流的输入及输出 IO流 IO的分类 根据数据的流向分为:输入流和输出流。 输入流 :把数据从...

  • Java-IO

    IO:Java数据的 输入\输出 数据流:根据流向分为输入流(InputStream\Reader)和输出流(Ou...

  • IO流

    一、IO流 1.1 IO的概述 IO流介绍 IO:输入/输出(Input/Output) 流:是一种抽象概念,是对...

  • JavaSE总结(9)IO流(1)

    一、IO流: IO流: input输入(流向内存) 读取数据 output输出(流出内存) 写出数据 IO...

  • 2019-08-26 IO字符流

    一.IO流概述 IO(input/output):输入和输出指的是某个设备或环境进行数据的输入或者输出,例如键盘的...

网友评论

      本文标题:IO输入/输出流(二)

      本文链接:https://www.haomeiwen.com/subject/bbfcpftx.html