zoukankan      html  css  js  c++  java
  • [转]探究java IO之FileInputStream类

    使用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();
            }
        }
    }
  • 相关阅读:
    [SQL Server]分页功能的实现
    [Others]每个文件夹都具有的特殊文件夹
    [ASP.NET]使页面的大小适合打印尺寸
    [SQL Server]树形结构的创建
    [ASP.NET]获取用户控件对象的引用
    [SQL Server]关于15517号错误的一点想法
    [SQL Server]创建自定义聚合函数值得注意的问题
    Java开源BI商业智能工具
    电子商务网站搜索架构方案
    产品经理如何培养对市场的敏感度和洞察力?
  • 原文地址:https://www.cnblogs.com/xunbu7/p/5023767.html
Copyright © 2011-2022 走看看