FileInputStream概述[通俗易懂]

2022-09-05 10:27:47 浏览数 (4)

大家好,又见面了,我是你们的朋友全栈君。

一 FileInputStream概述

FileInputStream:从文件系统中的文件获取输入字节。 可用的文件取决于主机环境。 FileInputStream用于读取诸如图像数据的原始字节流。 要读取字符流,请考虑使用FileReader。

二 FileInputStream的构造方法

1. FileInputStream(File file)

通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的 File对象 file命名。

2. FileInputStream(FileDescriptor ds)

使用文件描述符 fdObj创建 FileInputStream ,该文件描述符表示与文件系统中实际文件的现有连接。

3. FileInputStream(String name)

通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的路径名 name命名。

三 FileInputStream的常用方法

1. public int read​() throws IOException

1)作用:

从此输入流中读取一个字节的数据。 如果尚未提供输入,此方法将阻止。

2)输出:

数据的下一个字节,如果到达文件的末尾, -1 。

3)异常:

IOException – 如果发生I / O错误。

该方法不常用,因为一次只读一个字节,会频繁地进行和磁盘打交道,读取效率低下。

2. public int read​(byte[] b) throws IOException

1)作用:

从此输入流b.length最多b.length个字节的数据读入一个字节数组。

2)参数:

b – 读取数据的字节数组,缓冲区。

3)返回值:

读入缓冲区的总字节数,如果由于文件末尾已到达而没有更多数据,则返回 -1 。

4)异常:

IOException – 如果发生I / O错误。

3. public int available() throws IOException

1)作用:

返回可以从此输入流中读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞。 当文件位置超出EOF时返回0。 下一次调用可能是同一个线程或另一个线程。

2)返回值:

估计可以从此输入流中无阻塞地读取(或跳过)的剩余字节数。

3)异常:

如果通过调用 close关闭此文件输入流或发生I / O错误。

4. public long skip​(long n) throws IOException

1)作用:

跳过并从输入流中丢弃n字节的数据。

出于各种原因, skip方法可能最终跳过一些较小数量的字节,可能是0 。 如果n为负数,则该方法将尝试向后跳过。 如果后备文件不支持在其当前位置向后跳过,则抛出IOException 。 返回跳过的实际字节数。 如果它向前跳过,则返回正值。 如果它向后跳过,则返回负值。 此方法可能会跳过比后备文件中剩余的更多的字节。 这不会产生异常,跳过的字节数可能包括超出后备文件EOF的一些字节数。 跳过结束后尝试从流中读取将导致-1表示文件结束。

2)参数

n-要跳过的字节数

3)返回值

跳过的实际字节数

4)异常

IOException – 如果n为负数,如果流不支持搜索,或者发生I / O错误。

5. public void close() throws IOException

1)作用

关闭此文件输入流并释放与该流关联的所有系统资源。

四 案例

1. 使用public int read​() throws IOException

代码语言:javascript复制
package cn.donglinode.IO;

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

public class FileInputStreamDemo01 {
    public static void main(String[] args) {
        //文件路径
        String path="chapter16/src/tempFile.text";
        FileInputStream fis=null;
        try {
            //创建FileInputStream对象
            fis=new FileInputStream(path);
            //保存读到的字节值
            int res=0;
            while((res=fis.read())!=-1){
                System.out.println(res);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭流
            try {
                if (fis!=null){
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

输出结果:

2. 使用public int read​(byte[] b) throws IOException

代码语言:javascript复制
package cn.donglinode.IO;

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

public class FileInputStreamDemo02 {
    public static void main(String[] args) {
        //文件路径
        String path="chapter16/src/tempFile.text";
        FileInputStream fis=null;
        try {
            //创建FileInputStream对象
            fis=new FileInputStream(path);
            //定义一个字节数组用来保存读取到的数据
            byte[] bytes=new byte[4];
            //读取到的字节数
            int readCount=0;
            while((readCount=fis.read(bytes))!=-1){
                System.out.println(new String(bytes,0,readCount));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //关闭流
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

输出结果:

注意:在IDEA中,当前路径是project的根目录

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135622.html原文链接:https://javaforall.cn

1 人点赞