关于FileInputStream文件字节输入流:

1、FileInputStream,称为文件字节输入流,属于万能流,一次读一个字节byte,什么文件都能读。

也称为Read(读),从硬盘 到 内存输入文件数据。

测试代码:

import java.io.*;public class Test02 {public static void main(String[] args) {// 创建文件字节输入流对象FileInputStream fis = null;// 流操作会抛出异常,属于编译时异常,需要我们预先处理,main方法中的异常通常进行捕捉,不要上抛异常try {// F:\JavaCode\JavaSE\IOtest\test02.txt,文件地址,这种地址属于绝对路径// 文本内容:abcfis = new FileInputStream("F:\\JavaCode\\JavaSE\\IOtest\\test02.txt");  // 注意写2个\\,2个\\表示1个\//fis = new FileInputStream("F:/JavaCode/JavaSE/IOtest/test02.txt");  // 也可以写这种/,这种/没有转义的意思// 开始Read(读)/*int readData = fis.read();  // 返回的是第一个字节的ASCII编码值System.out.println(readData);  // 97    读的是'a'的字节// 再读下一个字节readData = fis.read();System.out.println(readData);  //98    读b// 再读下一个字节readData = fis.read();System.out.println(readData);  //99    读c// 再读下一个字节readData = fis.read();  // 当没有数据时,read()方法返回-1System.out.println(readData);  //-1*/// 以上读的操作也可以用循环控制int readData = 0;while ((readData = fis.read()) != -1) {System.out.print(readData + "   ");  // 97   98   99}System.out.println();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {  // finally语句块中的代码一定会执行,确保流用完后关闭if (fis != null) {  // 只有fis不为空的时候,才需要关闭通道try {fis.close();  // close()方法会抛出编译时异常,继续try..catch} catch (IOException e) {e.printStackTrace();}}}}
}

2、对FileInputStream的read()方法的熟悉:

如果使用read()每次都只能读一个字节,这样的话硬盘和内存之间交互太频繁,浪费时间。

可以考虑使用read(byte[] b)方法,一次最多读取b.length个字节。方法返回值是本次实际读取到的字节数量。

注意:是最多读取到b.length个字节,当读取到文件末尾时,有可能不够b.length个。

如果文件读取完了,再次读取就会返回-1了。

测试代码:

import java.io.*;public class Test03 {public static void main(String[] args) {FileInputStream fis = null;try {// 使用相对路径,IOtest\test03.txt,是当前文件下的// 注意:IDEA中的当前路径是project工程这个根文件fis = new FileInputStream("IOtest\\test03.txt");// 先提醒一下文本内容为:abcdef// 创建byte[]数组byte[] bytes = new byte[4];  // 指定一次最多读取4个字节// 第一次读取/*int readCount = fis.read(bytes);System.out.println(readCount);  // 4String strData = new String(bytes, 0, readCount);  // 将读取到的bytes数组转换成字符串System.out.println(strData);  //abcd// 第二次读取readCount = fis.read(bytes);System.out.println(readCount);  // 2strData = new String(bytes, 0, readCount);System.out.println(strData);  //ef// 第三次读取readCount = fis.read(bytes);System.out.println(readCount);  // -1   表示已经读取完了*/// 以上读取应该用循环控制int readCount = 0;while ((readCount = fis.read(bytes)) != -1) {System.out.print(new String(bytes, 0, readCount));  // abcdef}System.out.println();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}
}

3、关于FileInputStream类的常用方法:

(1)public FileInputStream(String name);
构造方法,创建文件输入流对象,连接到指定文件名。


(2)int read();
一次读取一个字节,返回该字节的ASCII码值。文件读完后返回-1。


(3)int read(byte[] b);
一次最多读取b.length个字节,返回实际读取字节的数量。文件读完后返回-1。


(4)void close();
关闭当前流的所有管道,释放资源。

所有流用完之后,一定记得关闭,释放资源。

通常close()方法放在finally语句块当中,来确保流用完后会关闭。


(5)int available();
返回流当中剩余的没有读取的字节数量。文件读完后返回0。

当文件不大时,可以考虑一次性读完文件。

byte[] bytes = new byte[fis.available()];  // 直接创建对应大小的byte[]数组
int readeCount = fis.read(bytes);
System.out.println(new String(bytes, 0, readCount));  // 如果是文本文件,可以自接打印查看

(6)long skip(long n);
跳过n个字节不读取。

有的文件可能有固定的格式,可以跳过这些不必要的字节数,来达到提高读取的效率。


关于FileInputStream文件字节输入流的使用相关推荐

  1. FileInputStream(文件字节输入流)

    目录 FileInputStream(文件字节输入流) 1. InputStream 常用的子类 2. FileInputStream介绍 2.1 构造方法摘要 2.2 方法摘要 2.3 应用实例:请 ...

  2. FileInputStream文件字节输入流

    java.io.FileInputStream  文件字节输入流 任何文件都可以采用这个流来读 字节的方式,完成输入的操作,完成读的操作(硬盘-->内存) 用read()方法一个一个字节读 一. ...

  3. 2018-08-21文件字节输出流OutputStream+文件字节输入流InputStream+字符输出流FileReader+字符输出流FileWriter...

    字节输出流OutputStream: OutputStream此抽象类,是表示输出字节流的所有类的超类!操作的数据都是字节,定义了输出字节流的基本共性功能方法! //输出流中定义都是写write方法, ...

  4. 文件字节输入流 java

    文件字节输入流 java 文件字节输入流 演练 一个字节一个节字的读 使用read方法一个字节一个字节的读 读出来的内容是字符的类似于ascii码的值 文件中的内容是: abcedfg 使用char强 ...

  5. 文件字节输入流读取字节数据(包含如何避免乱码)

    目录 文件字节输入流 方法一 方法二用水桶去装水 如何解决字节流读取中文乱码问题? 这个和前面学的stream流一样,一个流用完就没了 文件字节输入流 方法一 (普通的方式拿水) public int ...

  6. inputstream转fileinputstream对象_FileInputStream类:文件字节输入流

    API ----IO ----字节输入输出流练习 java.lang.Object 继承者 java.io.InputStream 继承者 java.io.FileInputStream public ...

  7. 字节输入流 InputStream

    字节输入流[InputStream] java.io.InputStream:字节输入流     此抽象类是表示字节输入流的所有类的超类. 定义了所有子类共性的方法:          int rea ...

  8. 详解字节输入流InputStream

    (一)InputStream:字节输入流 java.io.InputStream:字节输入流 此抽象类是表示字节输入流的所有类的超类 定义了所有子类共性的方法 int read()从输入流中读取数据的 ...

  9. 字节输入流_InputStream类FileInputStream类介绍

    package com.learn.demo02.InputStream;import java.io.FileInputStream; import java.io.IOException;/*ja ...

最新文章

  1. 前端学习(3111):react-hello-复习相关知识
  2. Java IO API记录
  3. 《PWA实战:面向下一代的Progressive Web APP》读书笔记
  4. vue 使用axios
  5. C#中(int),int.Parse,int.TryParse,Convert.ToInt32四则之间的用法
  6. mysql function 参数默认值_MySQL参数log_bin_trust_function_creators介绍
  7. (ZT)算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
  8. 经典排序算法(十八)--Proxmap Sort
  9. CI-持续集成(2)-软件工业“流水线”技术实现
  10. 七牛云对象存储实现文件的上传与下载
  11. win10系统做域服务器,win10启用ad域服务器配置
  12. php 分享微博,PHP调用微博接口实现微博登录
  13. 今日学习在线编程题:小码哥的序列
  14. 如何在浏览器中打开jupyter notebook
  15. 小新Pro13成功安装黑苹果超详细教程,小白也会安装双系统!
  16. 02-分类算法:knn、朴素贝叶斯、决策树和随机森林
  17. 二手手机泄露用户隐私?要“反杀”其实并不难
  18. 磁盘配额管理解决共享硬盘空间不足问题(图)
  19. SuperMap iClient for javaScript 动态线绘制(模拟飞机飞行)
  20. 博客-Blog开发,追踪现在的潮流

热门文章

  1. 一起捉妖服务器还要维护多久,一起来捉妖绑定期内什么意思 绑定期多久
  2. linux系统init5命令,2.3.5 切换系统运行级别命令init
  3. 苹果系统id服务器超时什么意思,链接id服务器超时怎么回事啊
  4. 实验五 数据库完整性
  5. 怎样将图片格式的PDF文档变成word 文字识别
  6. 《火星救援》为什么像真的?作者、导演和NASA专家告诉你
  7. 浅析女性导购分享APP开发的发展趋势
  8. Origin将图的格式保存为模板
  9. docker(7、容器网络6) weave 网络 Weave 跨主机的连通和隔离特性
  10. 博客园怎么设置背景图片