您的位置:

使用Java InputStream读取文件

一、InputStream概述

InputStream是Java IO中用于读取字节流的抽象类。它是所有输入流的超类,可以从文件、网络、内存等任何来源中读取字节流。

InputStream中最常用的方法是read(),用于读取下一个字节,返回的是字节数据的整数值,如果已到达流的末尾,则返回-1。

二、InputStrem使用

使用InputStream读取文件数据需要以下步骤:

    1、打开文件:使用InputStream打开指定文件。

    2、读取数据:使用read()方法读取文件数据。

    3、关闭文件:使用InputStrem关闭文件。

public class InputStreamExample {
    public static void main(String[] args) {
        try {
            FileInputStream inputStream = new FileInputStream("test.txt");
            int data;
            while ((data = inputStream.read()) != -1) {
                System.out.print((char) data);
            }
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

三、缓冲流BufferedInputStream

InputStream每次只能读取一个字节,如果需要读取大量数据,则需要多次读取,效率低下。这时可以使用缓冲流BufferedInputStream,在InputStream的基础上增加了一个缓冲区,使得可以批量读取数据,提高了读取效率。

public class BufferedInputStreamExample {
    public static void main(String[] args) {
        try {
            FileInputStream inputStream = new FileInputStream("test.txt");
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
            int data;
            while ((data = bufferedInputStream.read()) != -1) {
                System.out.print((char) data);
            }
            bufferedInputStream.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

四、字节数组InputStream

除了使用一个字节一个字节地读取文件数据,也可以直接将整个文件数据读入一个字节数组中,再进行处理。

public class ByteArrayInputExample {
    public static void main(String[] args) {
        String str = "Hello World!";
        byte[] byteArray = str.getBytes();
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
        int data;
        while ((data = byteArrayInputStream.read()) != -1) {
            System.out.print((char) data);
        }
        byteArrayInputStream.close();
    }
}

五、文件IO异常处理

在读取文件的过程中,可能会遇到文件不存在、无法访问、权限不够等异常。为了避免程序崩溃,需要对异常进行捕获和处理。

public class InputStreamEnsureExample {
    public static void main(String[] args) {
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream("test.txt");
            int data;
            while ((data = inputStream.read()) != -1) {
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

六、小结

Java InputStream提供了读取文件数据的基础功能,能够从文件、网络等不同来源中读取字节数据。使用InputStream读取文件数据需要遵循打开、读取、关闭的基本步骤,可以结合缓冲流BufferedInputStream、字节数组InputStream等进行批量读取数据,提高读取效率。同时在读取文件数据时需要处理可能出现的异常,并最终保证文件流的关闭。