io流的FileInputStream

io流概述

Java.io有5个类和1个接口:

5个类:File OutputStream InputStream Writer Reader

1个接口:Serializable

io流分为三个部分:

1、流式部分――IO的主体部分

2、非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类

3、其他类--文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操作系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类。(未深学习)

 主要的类:

     1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。

     2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。

     3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。

     4.Reader(文件格式操作):抽象类,基于字符的输入操作。

     5. Writer(文件格式操作):抽象类,基于字符的输出操作。

     6. RandomAccessFile(随机文件操作):一个独立的类,直接继承至Object.它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。


字节流

1、输入和输出流

首先,字节流要进行读和写,也就是输入和输出,所以它有两个抽象的父类InputStream、OutputStream。

InputStream抽象了应用程序读取数据的方式,即输入流。
OutputStream抽象了应用程序写出数据的方式,即输出流。
2、读写结束

在字节流中当读写结束,达到文件结尾时,称为EOF = End或者读到-1就读到结尾。

3、输入流基本方法

通过文本文件上输入内容,这个过程键盘充当的就是输入流,而不是输出流。(键盘的功能是将内容输入到系统,系统再写入文件上)

 int b = in.read(); //读取一个字节无符号填充到int
 in.read(byte[] buf); //读取数据填充到字节数组buf中
 in.read(byte[] buf,int start, int size)

输出流基本方法

方法为write(),可以将此方法与输入read()方法一 一对应

out.write(int b)//
out.write(byte[] buf)//写入流
out.write(byte[] buf, int start,int size) //字节数组buf从start位置开始写size长度的字节到流

使用FileInputStream

read()方法读取文件

   public static void printHex(String fileName) throws IOException{
        //把文件作为字节流进行读操作
        FileInputStream in=new FileInputStream(fileName);
        int b;
        int count=0;//计数读到的个数
        while((b=in.read())!=-1){
            if(b<=0xf){
                //单位数前面补0
                System.out.println("0");
            }
            System.out.print(Integer.toHexString(b& 0xff)+" ");
            if(++count%10==0){
                System.out.println();
            }
        }
        in.close();//关闭流
    }

注:
·FileInputStream()构造函数可以通过文件名(String)也可以通过File对象。上面的案例是使用文件名来构造的。
·(b=in.read())!=-1 通过读到-1来判断是否读到文件结尾。
·in.close() 使用完IO流的对象一定要关闭流

使用read(byte[] buf,int start, int size)方法读取文件

一次性读取

public static void printHexByBytes(String fileName) throws IOException{
        FileInputStream in=new FileInputStream(fileName);
        byte[] buf=new byte[20*1024];//20k字节数组
        //一次性读完
        int count=in.read(buf, 0, buf.length);
        int j=1;
        for(int i=0;i<count;i++){
            if((buf[i]&0xff)<=0xf){
                //单位数前面补0
                System.out.print("0");
            }
            System.out.print(Integer.toHexString(buf[i]&0xff)+ " ");
            if(j++%10==0){
                System.out.println();
            }
        }
             in.close();
    }
}

(方法摘要用法)

(构造方法)

总结:

输出流是往存储介质或数据通道写入数据

输入流是从存储介质或数据通道中读取数据

关于流的特性:

1、先进先出,最先写入输出流的数据最先被输入流读取到。

2、顺序存取,可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。(RandomAccessFile可以从文件的任意位置进行存取(输入输出)操作)

3、只读或只写,每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,对输出流只能进行写操作。在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流。 

·输入和输出流

字节流要输入和输出,则它有两个抽象的父类InputStream、OutputStream。

InputStream抽象了应用程序读取数据的方式 (输入流)


OutputStream抽象了应用程序写出数据的方式(输出流)
·读写结束

在字节流中当读写结束,达到末尾时,EOF = End或到-1结尾。

eg:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HersenLee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值