当前位置: 首页 > news >正文

关于FileInputStream(万能文件字节输入流)

package com.javase.io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * java.io.FileInputStream:
 *     1.是文件字节输入流,万能的,任何类型的文件都可以采用这个流来读。
 *     2.以字节的方式完成读的操作(硬盘---->内存)
 */
public class FileInputStreamText01 {
    public static void main(String[] args) {
        //创建文件字节输入流对象
        //文件路径:D:\测试.txt
        FileInputStream fis = null;
        try {
            fis = new FileInputStream("D:\\测试.txt");

            /*
            //开始读 (这种方法一次只读一个字节效率低)
            int readData = 0;
            while ((readData = fis.read()) != -1) {
                readData = fis.read();
                System.out.print(readData);
            }
            */
            /*
            //为了提高效率,我们可以一次读取一个数组长度的字节
            //创建一个byte[]数组,该数组的长度自定义,本段代码是测试用,所有定义的很小
            byte[] bytes = new byte[5];
            while (true){
                //该方法是往byte[]数组中读,一次最多读取的字节数量是bytes.length,这个方法的返回值是读取的字节数量,该方法
                //一个字节都没读取到的时候返回值是-1。
                int readCount = fis.read(bytes);
                if (readCount == -1){   //当某次读取什么都没读到,循环结束
                    break;  //结束循环
                }
                //把读到的字节转换成字符串输出,读到多少转多少,
                //new String(bytes,0,readCount)这个方法就是把byte[]数组转换成字符串
                System.out.print(new String(bytes,0,readCount));
            }
             */
            //继续对上面效率已经提高了的代码进行改进(下面这种写法是需要大家掌握的)
            //创建一个byte[]数组
            byte[] bytes = new byte[5];
            //给定一个int变量并赋值为0;
            int readCount = 0;
            //分析一下下行代码的执行
            //第一步:执行"="右边的代码 fis.read(bytes) 用来读取文件,它执行结果是int类型,表示读取到了多少字节.
            //第二步:将上一步的int类型的返回值赋值给变量readCount.
            //第三步:判断readCount是否不等于-1,该步的返回值是boolean类型,如果读到了字节,这里的结果就是true;
            //如果没有读到字节,返回值就是false,下面循环就结束了
            while ((readCount = fis.read(bytes)) != -1){
                System.out.print(new String(bytes,0,readCount));
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {//在finally语句块中确保流一定会关闭
            if (fis != null) {//判断fis(流)是不是空,不是空确保关闭,是空没必要关闭
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

相关文章:

  • 一个人做网站好难/武汉网站seo德升
  • 做网站类型的营业执照证明如何填写/付费推广外包
  • 官方网站新闻推送如何做滚动图片/外包公司被辞退有补偿吗
  • 交友类网站功能建设思路/防止恶意点击软件管用吗
  • 天津网络网站制作/广州番禺发布
  • 如何做好网站宣传/东莞网站制作公司
  • 哪一件事让你忽然意识到打工永无出路?
  • 【老保姆教程】:Tesseract-OCR图片文字识别
  • 【服务器数据恢复】Storwize系列存储raid5数据恢复案例
  • 如何在 Spring Boot 项目中开启 “热部署“
  • Kubernetes 实现自动扩容和自愈应用实践
  • docker https 证书/多域名通配符自动续期(群晖https证书)
  • 您如何在 Web 表单字段/输入标签上禁用浏览器自动完成功能?
  • 变分自编码器VAE的数学原理
  • Scala 高阶函数(二)
  • 【Python百日进阶-数据分析】Day136 - plotly旭日图:px.sunburst()实例
  • MyBatis学习 | SQL映射文件
  • 高校GIS系统有何作用?