java中的FileInputStream三种read()函数用法

作者:惟念依 时间:2021-10-27 23:01:21 

FileInputStream流的三种read()函数对比

首先我们先创建FileIputStream流对文件进行读取

public static void main(String[] args) throws IOException {
//创建File对象,保存文件夹路径iu
File fin_floder = new File("C:\\test.txt");

//创建从文件读取数据的FileInputStream流
FileInputStream fin = new FileInputStream(fin_floder);

1. int read( )函数 

该函数的返回值为int数值,表示读取的字符对应的ascii码,当返回为-1表示读取到文件末尾;

//顺序读取到文件末尾
int temp = 0;
while( (temp = fin.read()) != -1) {
System.out.print(temp+"   ");  //打印read()返回值
System.out.printf("%c",temp);  //打印ascii码对应的字符
System.out.println();//换行
}

读取 hello,world 文本文档的结果:

java中的FileInputStream三种read()函数用法

2. read( byte [ ] ) 

返回读入缓冲区的字节总数,到末尾返回-1

int size = fin.available();  //返回文件的总字节数
byte[] b = new byte[size];   //生成缓存用于存放读入的字节
System.out.println(fin.read(b));
String str = new String(b);  //将字节数组转化为字符串
System.out.println(str);

读取 hello,world 文本文档的结果:数值 11

java中的FileInputStream三种read()函数用法

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

off表示目标数组b中的起始偏移量,也就是从第几个下标开始写入数组,len表示写入数组的长度;

int size = fin.available();
byte[] b = new byte[size];
fin.read(b,2,5); //从数组的的第三个元素开始写入,写五个字节长度
String str = new String(b); //字节数组转化为字符串
System.out.println(str);

输出结果为:

java中的FileInputStream三种read()函数用法

FileInputStream中的read()方法

首先这是我自己写代码的时候遇到的一个问题,我思来想去,终于想通透了,所以想分享给大家,当然这也是一个非常简单的问题。

public class IO_InputStream
 public static void main(String[] args){//需要导包的,图方便我就不写了
//1.new一个FileInputStream对象
  FileInputStream fis = new FileInputStream("chifan.next)) ;
  //例如这个文本里面我放了1234567共7个字符,下面开始读取文件
  while(fis.read() != -1){
    System.out.print( char)fis.read() );  //将read()方法调用后返回值为int类型强制转换为字符,以便打印
  }
  //但是打印结果就是:246,隔一个打印一个,我感到疑惑
  //后来我左思右想发现我在while的执行语句块里面的打印方法又调用了一次read()方法,导致打印的其实是每次读取两个字符后,只会打印每两个的最后一个字符,如果我们在123456后面再一个7,那么最后打印的就是一个?如何解决呢?就是我们不要在执行语句块里面出现read()方法
  int len;
  while(len=fis.read() != -1){
    System.out.print( char)len);
}
//这样结果就一致了

来源:https://blog.csdn.net/kendleo/article/details/105253030

标签:java,FileInputStream,read
0
投稿

猜你喜欢

  • Android实现聊天界面

    2023-04-09 22:57:57
  • Eclipse添加xml文件提示及Hibernate配置学习

    2023-08-17 05:01:47
  • java实现双色球机选号码生成器

    2022-10-05 07:41:33
  • Logger.error打印错误异常的详细堆栈信息

    2022-01-06 23:03:04
  • 2022 最新 IntelliJ IDEA 详细配置步骤演示(推荐)

    2021-11-20 21:05:48
  • Java mongodb连接配置实践

    2022-05-02 11:50:56
  • 学生视角看Java 面向对象的继承本质

    2022-04-23 21:51:10
  • 关于java数组与字符串相互转换的问题

    2021-08-08 18:50:31
  • 使用Java8 Stream流的skip + limit实现批处理的方法

    2023-11-29 06:17:39
  • Java String类的常用方法汇总

    2022-04-10 11:58:24
  • C#文件流读写和进度回调示例详解

    2022-08-12 14:52:31
  • java实现短信验证码5分钟有效时间

    2023-08-30 18:42:26
  • 深入了解Java接口回调机制

    2023-11-09 15:52:05
  • java多线程复制文件的实例代码

    2022-03-04 04:29:54
  • 简单实现Android弹出菜单效果

    2023-01-11 18:58:46
  • Java利用cors实现跨域请求实例

    2023-02-24 14:57:35
  • Android7.0 工具类:DiffUtil详解

    2023-02-24 01:43:46
  • Java Idea高效率配置技巧实例解析

    2023-06-05 13:24:42
  • 手把手教你SpringBoot轻松整合Minio

    2022-07-24 14:00:37
  • Java中用enum结合testng实现数据驱动的方法示例

    2021-08-04 07:44:21
  • asp之家 软件编程 m.aspxhome.com