FileInputStream概述[通俗易懂]

FileInputStream概述[通俗易懂]一FileInputStream概述FileInputStream:从文件系统中的文件获取输入字节。可用的文件取决于主机环境。FileInputStream用于读取诸如图像数据的原始字节流。要读取字符流,请考虑使用FileReader。二FileInputStream的构造方法1.FileInputStream(Filefile)通过打开与实际文件的连接来创建FileInputStream,该文件由文件系统中的File对象file命名。2.FileInputSt…

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

一 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)作用

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

四 案例

FileInputStream概述[通俗易懂]

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

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();
            }
        }
    }
}

输出结果:

FileInputStream概述[通俗易懂]

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

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();
            }
        }
    }
}

输出结果:

FileInputStream概述[通俗易懂]

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

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2022年6月4日 下午9:00
下一篇 2022年6月4日 下午9:16


相关推荐

  • 链表经典算法

    链表经典算法

    2021年8月20日
    60
  • Java学习从入门到精通

    Java学习从入门到精通

    2026年3月16日
    3
  • 科大讯飞发布星火X2大模型

    科大讯飞发布星火X2大模型

    2026年3月14日
    3
  • zencart和php是什么,什么是ZenCart ZenCart有什么特点 ZenCart模板

    zencart和php是什么,什么是ZenCart ZenCart有什么特点 ZenCart模板什么是ZenCart?ZenCart有什么特点,ZenCart模板什么是ZenCart?ZenCart是免费的购物车软件-用于建立自己的网上商店,为网上销售商而设计。ZenCart是一个免费、界面友好,开放式源码的购物车软件。该软件由一些销售商、程序员、设计师和顾问们共同开发,目的就是用户能建立风格不同的电子商务系统。现有的一些解决方案过重于编程,而不是着眼于客户的需求。ZenCart把销售商…

    2022年7月27日
    5
  • X86系统中EAX、ECX、EDX、EBX寄存器的作用

    X86系统中EAX、ECX、EDX、EBX寄存器的作用转自 https www cnblogs com 78292959 archive 2012 07 20 2600865 html nbsp 一般寄存器 AX BX CX DXAX 累积暂存器 BX 基底暂存器 CX 计数暂存器 DX 资料暂存器索引暂存器 SI DISI 来源索引暂存器 DI 目的索引暂存器堆叠 基底暂存器 SP BPSP 堆叠指标暂存器 BP 基底指标暂存器 E

    2026年3月16日
    2
  • URLEncoder转换字符串问题

    URLEncoder转换字符串问题今天在开发过程中遇到了一个坑,关于使用URLEncoder去encode字符串的问题,是解析一个下载地址,由于下载文件名中含有空格,导致encode之后所有空格变成了“+”,url拼接自然就出错了,下载地址相应不到报了404异常,由于之前没接触过这方面的事情,也算是给自己挖了一个小坑,特此记录一下。这段是业务背景,不想看的直接跳到下一段看解决办法哈。大概是这样,公司网站原本下载各种附件的地…

    2022年6月29日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号