Java IO流(二)-字节流输入流

发布时间:2024年01月04日

1.字节输入流

1.1 字节输入流介绍

  • 字节输入流类
    • InputStream类 : 字节输入流最顶层的类 , 抽象类
      — FileInputStream类 : FileInputStream extends InputStream
  • 构造方法
    • public FileInputStream(File file) : 从file类型的路径中读取数据
    • public FileInputStream(String name) : 从字符串路径中读取数据
  • 步骤
    • 创建输入流对象
    • 读数据
    • 释放资源
package javaio.in.demo1;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/*
        字节输入流写数据快速入门 : 一次读一个字节
        第一部分 : 字节输入流类
        InputStream类 : 字节输入流最顶层的类 , 抽象类
        --- FileInputStream类 : FileInputStream extends InputStream
        第二部分 : 构造方法
public FileInputStream(File file) :  从file类型的路径中读取数据
public FileInputStream(String name) : 从字符串路径中读取数据
        第三部分 : 字节输入流步骤
        1 创建输入流对象
        2 读数据
        3 释放资源
        */
public class FileInputStreamDemo1 {
    public static void main(String[] args) throws IOException {
        // 创建字节输入流对象
        FileInputStream fis=new FileInputStream("aaa.txt");
        // 读数据 , 从文件中读到一个字节
        // 返回的是一个int类型的字节
        // 如果想看字符, 需要强转
        int by = fis.read();
        System.out.println((char)by);
        fis.close();
    }
}

1.2 字节输入流读取多个字节

public class FileInputStreamDemo2 {
    public static void main(String[] args) throws IOException {
        // 创建字节输入流对象
        FileInputStream fis=new FileInputStream("aaa.txt");
        int by;
        while ((by=fis.read())!=-1){
            System.out.println((char)by);
        }

        //释放资源
        fis.close();
    }
}

1.3 案例

public class FileInputStreamDemo3 {
    public static void main(String[] args) throws IOException {
        //创建字节流输入对象
        FileInputStream fis =new FileInputStream("D:\\Apache24\\htdocs\\brawlive\\site\\upload\\images\\202203\\29\\1648532403_284454_max.jpg");

        //创建字流输出流对象
        FileOutputStream fos = new FileOutputStream("copy.jpg");
        int by;
        while ((by=fis.read())!=-1){
            fos.write(by);
        }
        //释放资源
        fis.close();
        fos.close();
    }
}

1.4 异常的捕捉处理

JDK7版本之前处理方式 : 手动释放资源
public class FileInputStreamDemo4 {
    public static void main(String[] args) {
        FileInputStream fis =null;
        FileOutputStream fos =null;
        try{
            //创建字节流输入对象
            fis =new FileInputStream("D:\\Apache24\\htdocs\\brawlive\\site\\upload\\images\\202203\\29\\1648532403_284454_max.jpg");

            //创建字流输出流对象
            fos = new FileOutputStream("copy.jpg");
            int by;
            while ((by=fis.read())!=-1){
                fos.write(by);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            //释放资源
            if(fis==null){
                try {
                    fis.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
            //释放资源
            if(fos==null){
                try{
                    fis.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

JDK7版本优化处理方式 : 自动释放资源
  • JDK7优化后可以使用 try-with-resource 语句 , 该语句确保了每个资源在语句结束时自动关闭。
    简单理解 : 使用此语句,会自动释放资源 , 不需要自己在写finally代码块了
public class FileInputStreamDemo5 {
    public static void main(String[] args) {
        try (
                //创建字节流输入对象
                FileInputStream fis =new FileInputStream("D:\\Apache24\\htdocs\\brawlive\\site\\upload\\images\\202203\\29\\1648532403_284454_max.jpg");

                //创建字流输出流对象
                FileOutputStream fos = new FileOutputStream("copy.jpg");
        ) {
            // 一次读写一个字节
            int by;
            while ((by = fis.read()) != -1) {
                fos.write(by);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

1.5字节输入流一次读一个字节数组

FileInputStream类 :

  • public int read(byte[] b) : 从输入流读取最多b.length个字节的数据, 返回的是真实读到的数据个数
public class FileInputStreamDemo6 {
    public static void main(String[] args) throws IOException {
        // 创建字节输入流对象
        FileInputStream fis = new FileInputStream("aaa.txt");
        byte[] bys = new byte[3];
        int len;
        while ((len = fis.read(bys)) != -1) {
            System.out.print(new String(bys , 0 , len));
        }

        fis.close();
    }
}

文章来源:https://blog.csdn.net/lisus2007/article/details/135389757
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。