使用FileInputStream类创建的InputStream对象可以用于从文件读取内容。两个常用的构造函数如下所示:

1
2
FileInputStream(String filePath)
FileInputStream(File fileObj)

这两个构造函数都会抛出FileNotFoundException异常。其中,filePath是文件的完整路径名,fileObj是描述文件的File对象。

下面的例子创建了两个FileInputStream对象,它们使用相同的磁盘文件,并且分别是使用这两个构造函数创建的:

1
2
3
FileInputStream f0 = new FileInputStream("/autoexec.bat");
File f = new File("/autoexec.bat");
FileInputStream f1 = new FileInputStream(f);

尽管第一个构造函数可能更常用,但是使用第二个构造函数,在将文件附加到输入流之前,可以使用File类的方法对文件进行进一步检查。当创建FileInputStream对象时,还可以为读取而打开流。FileInputStream类重写了InputStream抽象类中的6个方法,但没有重写mark()和reset()方法。当在FileInputStream对象上试图调用reset()方法,会抛出IOException异常。

如例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package io;
 
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
public class FileInputStreamDemo1 {
    public static void main(String[] args) {
        try(InputStream in = new FileInputStream(
                "/home/fuhd/work/workspace/java/decompile/src/com/fhd/DownloadApkUtil.java");
                OutputStream out = new BufferedOutputStream(System.out)){
            int num = in.available();
            System.out.println("文件总大小为:" + num + "字节");
            int k;
            byte[] buffer = new byte[1024];
            while((k = in.read(buffer)) != -1){
                /*
                 * 这里最好定义成从0下标读取,读取K个字节,以免造成重复读取以前的数据。
                 * 比如,最后一次读取字节没有装载满buffer时,没被装载的空间可能还是上一次
                 * 的数据。例如:上次读取到buffer的为:[1,2,3,4,5,6],而这一次最后读取了7,8,9
                 * 这三个数,那现在buffer中为:[7,8,9,4,5,6],如果直接用out.write(buffer)读会
                 * 读出多余的数据,所以使用out.write(buffer,0,k)就不会重复读取。
                 */
                out.write(buffer,0,k);
            }
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

[转]探究java IO之FileInputStream类的更多相关文章

  1. Java—IO流 File类的常用API

    File类 1.只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问. package cn.test; import java.io.File; import java.io.IOE ...

  2. java io包File类

    1.java io包File类, Java.io.File(File用于管理文件或目录: 所属套件:java.io)1)File对象,你只需在代码层次创建File对象,而不必关心计算机上真正是否存在对 ...

  3. Java IO 之 FileInputStream & FileOutputStream源码分析

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

  4. 【Java IO】FileInputStream 和 FileOutputStream

    class FileInputStream extends  InputStream implements Closeable

  5. java IO之 File类+字节流 (输入输出 缓冲流 异常处理)

    1. File类

  6. java IO操作:FileInputStream,FileOutputStream,FileReader,FileWriter实例

    FileInputStream <span style="font-family:Verdana;">import java.io.File; import java. ...

  7. 系统学习 Java IO (三)----文件类 File

    目录:系统学习 Java IO---- 目录,概览 Java IO API 中的 File 类可以访问基础文件系统. 使用 File 类,可以: 检查文件或目录是否存在. 如果目录不存在,创建一个目录 ...

  8. JAVA:IO流——File类

    1.掌握File 类的作用 2.可以使用File 类中的方法对文件进行操作 所有的 io 操作都保存在 java.io 包中. 构造方法:public File (String pathname) 直 ...

  9. JAVA自学之-----FileInputStream类

    1, FileInputStream类函数创建: package coreJava; import java.io.FileInputStream; import java.io.IOExceptio ...

随机推荐

  1. gdb常用调试命令

    一般来说,GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序.    2.可让被调试的程序在你所指定的调置的断点处停住.(断点可以是条件表达式)   ...

  2. mysql启动

    mysql启动遇到的问题

  3. HDU 1081 To The Max(动态规划)

    题目链接 Problem Description Given a two-dimensional array of positive and negative integers, a sub-rect ...

  4. windows cmd启动heritrix

    首先下载heritrix-1.14.4.zip文件,可以在http://sourceforge.net/projects/archive-crawler/files/heritrix3/下载.下载后解 ...

  5. wpf 数据绑定的4种形式

    1.source 2.element 3.relativesource 4.datacontent

  6. 安装appuim

    一.作为一名软件测试人员,对工作习惯和品质的有要求,要有对问题的敏感度,遇到问题就不能轻易放过,提前保存一切可能对分析解决问题有帮助的资料,不怕麻烦,尽可能的全面详细,不漏重点.若神经大条,嫌麻烦,不 ...

  7. javascript中函数的call,apply及bind方法

    call 方法调用一个对象的一个方法,以另一个对象替换当前对象.call([thisObj[,arg1[, arg2[,  [,.argN]]]]])参数thisObj可选项.将被用作当前对象的对象. ...

  8. 【第三篇】学习 android 事件总线androidEventbus之list数据事件的传递,发送list数据事件到另外一个Activity

    这个和普通的事件总线的发送接收一样. package com.example.mysimpleeventbus; import java.util.ArrayList; import java.uti ...

  9. 第十四章:使用CSS3进行增强

    1.为不支持某些属性的浏览器使用polyfill:如果想弥合较弱的浏览器和较强的浏览器之间的功能差异,可以使用polyfill(通常又称作垫片),通常用js实现.但是有些较弱的浏览器运行JS的速度要慢 ...

  10. Java中try-catch-finally的一点理解

    在只有try-catch语句中,如果catch块中出现了return语句或者抛出了异常,那么catch之后的语句是执行不到的:但是如果将代码放入finally中,即使catch中出现了return语句 ...