字节输入流

现在我们需要读取记事本文件中的数据,经过分析需要找到一个输入流来读取文件内容,所以找到了InputStream(字节输入流),但是此类是抽象类,而且读文件的方法(read)是实例方法,

所以我们向下找子类来创建对象并调用方法,InputStream有很多的子类,其中最常用的是文件流FileInputStream了,主要用来操作文件的。

构造方法:

  1. FileInputStream(File file)     表示从file指向的文件中读取
  2.   FileInputStream(String name) name表示文件的路径名(路径+文件名)

读取的方法:

  1. int read()

       调用一次读到一个数据字节,返回的int值就是读到的数据

       如果已到达文件末尾,则返回 -1                

        2.int read(byte[] b)

       调用一次本方法表示可以读取多个数据

       读到的内容保存传入的byte数组b中

       返回的是本次调用方法读到的数据字节个数

       思考? b数组是有长度,干嘛还要单独返回读到的个数呢?

        3.int read(byte[] b, int off, int len)

       和上面的第二个类似,可以指定从b数组什么位置开始装

使用循环读取整个文件内容:

int read = 0;//准备一个变量 : 将读取的每一个字节的数据,;零时存入到该变量

while(   (read = fis.read())   != -1     ){//用read保存的结果:跟-1比较

    System.out.println((char)read);//每次保存的结果,强转成字符

}

使用一次读取一个数组的方式:

int len;//读取的字节的个数

byte[] arr = new byte[1024];//五个字节的数据,缓存在该数组的

while(   (len = fis.read(arr))  !=  -1  ){

    System.out.println(  new String(arr,0,len) );

}

读取中文产生乱码原因分析:

总结(字节输入流读取的流程以及注意事项)

  1. 搞清楚是需要读文件还是写文件  ---> 选择什么流
  2. 明确读哪个文件
  3. 创建一个输入流的对象(目的是为了调用其中的read方法)
  4. 调用读取方法获得数据
  5. 关闭流资源 通过流对象来调用close方法(流关闭之后是不能够在操作的-读取)

读取的文本内容:Ab中文

FileInputStream fis = new FileInputStream("cc.txt");

       int len;

       byte[] arr = new byte[1];//一次只读取一个字节:但是中文字节数不止一个

       while(   (len = fis.read(arr))  !=  -1  ){

           System.out.print(  new String(arr,0,len) );

       }

       fis.close();

        ab????

注意事项:

中文乱码的问题 ,一个中文是两个数据字节,  read()  一次读到的是一个数据字节,期待后面的字符流,定义临时读取的数组的长度问题,适当大小即可,最好不要想一次读完

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值