美文网首页
【Java学习】IO流类型及用法

【Java学习】IO流类型及用法

作者: 榆野铃爱 | 来源:发表于2019-08-15 00:22 被阅读0次

    心得感悟

    一开始总是会被长的英文吓到,英语考试也会这样,但学了一段时间Java后感觉没那么怕了,很长的名字或者方法名都司空见惯,算是一点额外收获吧。有个同学发现Java中可用中文命名,尝试这样写一个类或方法后再看代码突然变得很简单,想来外国人编程肯定轻松多了。IO流的各种方法名比较长又有点相似,弄混也是有可能的,认真理解练习后就不会混了。


    1. 目的

    • 一、理解Java中的流及用法
    • 二、掌握文件的读写方法
    • 三、利用上面的知识写一个密码解锁Demo

    2. 内容简概

    • 一、IO流概念及用法
    • 二、常见字节流的简单讲解
    • 三、常见字符流的简单讲解
    • 四、各种流的对比

    3. 具体内容

    • 一、IO流概念及用法

    1. 概念
    JavaIO流,是一种计算机用语。主要是用于处理数据的传输。

    2. 分类
    IO流有三种分类方式,按流的方向分为:输入流和输出流。按流的数据单位不同分为:字节流和字符流。按流的功能不同分为:节点流和处理流。在这里我们按数据单位来分类。从左至右为父类至子类。

    IO流的分类
    • 二、常见字节流的简单讲解

    (1)InputStream
    将外部数据读取到内存中。

    // 第1步、声明一个文件对象
    File file = new File("文件地址/自定义文件名");    
    // 第2步、通过子类实例化父类对象
    InputStream input = new FileInputStream(file); 
    // 第3步、进行读取操作
    byte b[] = new byte[1024];        // 所有的内容都读到此数组之中
    input.read(b);                 
    // 第4步、关闭文件
    input.close();                 
    System.out.println("内容为:" + new String(b));    // 把byte数组变为字符串输出
    

    (2)OutputStream
    从内存空间将数据写入外部设备(硬盘\磁盘\光盘)。

    // 第1步、声明一个文件对象
    File file = new File("文件地址/自定义文件名");    // 声明File对象
    // 第2步、通过子类实例化父类对象
    OutputStream out = new FileOutputStream(file); 
    // 第3步、进行写入操作
    String str = "Hello World!!!";        // 准备一个字符串
    byte b[] = str.getBytes();            // 只能输出byte数组,所以将字符串变为byte数组
    out.write(b);                        // 将内容输出,保存文件 文件不存在会自动创建
    // 第4步、关闭文件
    out.close() ;                      
    

    (3)FileInputStream
    文件字节输入流,指对文件数据以字节的形式进行读取操作如读取图片视频等。

    // 第1步、声明一个文件对象
    File file = new File("文件地址/自定义文件名");    
    // 第2步、创建文件输入流对象
    FileInputStream fis = new FileInputStream(file);
    // 第3步、调用read方法读取
    byte[] name = new byte[12];
    int count = fis.read(name);
    // 第4步、关闭文件
    fis.close();
    System.out.println(count+" "+new String (name));
    

    (4)FileOutputStream
    文件字节输出流,指对文件以字节的形式进行写入数据。

    // 第1步、声明一个文件对象
    File file = new File("文件地址/自定义文件名");    
    // 第2步、创建文件输出流对象
    FileOutputStream fos = new FileOutputStream(file);
    // 第3步、调用write方法写入
    byte[] text = {'1','2','3','4'};
    fos.write(text);
    // 第4步、关闭文件
    fos.close();
    

    (5)BufferedInputStream
    文件字节输入流,指对文件数据以字节的形式进行读取操作如读取图片视频等。

    // 第1步、找一个源文件的地址
    String sourcePath = "C:/Users/ASUS/Desktop/1.PNG";
    // 第2步、创建文件输入流对象
    FileInputStream fin = new FileInputStream("file1.txt");
    BufferedInputStream bin = new BufferedInputStream(fin);
    // 第3步、读取文件
    System.out.println(bin.available());
    // 第4步、关闭文件
     bis.close();
    

    (6)BufferedOutputStream
    文件字节输出流,指对文件以字节的形式进行写入数据。

    // 第1步、找一个想要保存文件的地址
    String desPath = "F:/homework/java/day1/java/src/main/java/day8/1.jpeg";
    // 第2步、创建文件输出流对象
    FileOutputStream os = new FileOutputStream(desPath);
    BufferedOutputStream bos = new BufferedOutputStream(os);
    // 第3步、写入文件
    byte[] in = new byte[1024];
    int count = 0;
    while ((count = bis.read(in)) != -1){
          bos.write(in,0,count);
    }
    // 第4步、关闭文件
     bos.close();
    
    • 三、常见字符流的简单讲解

    (1)BufferedReader
    文件字符输入流,指对文件数据以字符的形式进行读取操作如读取图片视频等。为了提高字符流读写的效率,引入了缓冲区,进行字符批量的读写,提高了单个字符读写的效率。

    // 第1步、声明一个文件对象
    File file = new File("文件地址/自定义文件名");   
    // 第2步、实例化BufferedReader对象
    BufferedReader br = new BufferedReader(new FileReader(file));
    // 第3步、读取数据
    String str = null;
    while((str = br.readLine()) != null){
          System.out.println(str);           //一行一行地读取
    }
    // 第4步、关闭文件
    br.close() ;                        
    

    (2)BufferedWriter
    文件字符输出流,指从程序中向一个文件写入数据。为了提高字符流读写的效率,引入了缓冲区,进行字符批量的读写,提高了单个字符读写的效率。

    // 第1步、声明一个文件对象
    File file = new File("文件地址/自定义文件名");   
    // 第2步、实例化BufferedReader对象
    BufferedReader br = new BufferedReader(new FileReader(file));
    // 第3步、写入数据
    BufferedWriter.Write("I'm so tired");    
    BufferedWriter.newLine();
    BufferedWriter.write("I want to sleep!!!");
    // 第4步、关闭文件
    br.close() ;                        
    

    (3)FileReader
    按字符向流中写入数据。

    // 第1步、声明一个文件对象
    File file = new File("文件地址/自定义文件名");   
    // 第2步、实例化FileReader对象
    FileReader fr = new FileReader(file);
    // 第3步、读取数据
    char[] book = new char[4];
    int count = fr.read(book);
    // 第4步、关闭文件
    fr.close();
    System.out.println(count+" "+new String (book));
    

    (4)FileWriter
    按字符写入数据.

    // 第1步、声明一个文件对象
    File file = new File("文件地址/自定义文件名");   
    // 第2步、实例化FileWriter对象
    FileWriter fw = new FileWriter(file);
    // 第3步、写入数据
    char[] name = {'困','死','我','啦'};
    fw.write(name);
    // 第4步、关闭文件
    fr.close();
    
    • 四、各种流的对比

    1. FileInputStream和BufferedInputStream、FileReader

    • BufferedInputStream:一般情况下,BufferedInputStream比FileInputStream读取速度快,因为BufferedInputStream多了一个缓冲区,但当读取数据较大时,二者速度差不多。
    • FileReader:FileInputStream是以字节流方式读取,而FileReader是把文件转换为字符流读取的。

    2. FileOutputStream和BufferedOutputStream、FileWriter

    • BufferedOutputStream:一般情况下,BufferedOutputStream比FileOutputStream写入速度快,因为BufferedOutputStream多了一个缓冲区,但当读取数据较大时,二者速度差不多。
    • FileWriter:FileInputStream是以字节流方式写入,而FileReader是以字符流方式写入。

    结语

    在下一篇文章中,我将给出一个应用IO流的Demo用于练习。

    相关文章

      网友评论

          本文标题:【Java学习】IO流类型及用法

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