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

目录
  • FileInputStream流的三种read()函数对比
    • 1. int read( )函数
    • 2. read( byte [ ] )
    • 3. read(byte[ ] ,int off ,int len)
  • FileInputStream中的read()方法
  • 总结

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 文本文档的结果:

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

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);

输出结果为:

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);
}
//这样结果就一致了

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • vue实现一个获取按键展示快捷键效果的Input组件

    遇到一个需求,页面内要自定义快捷键,这就需要可以有地方设置和展示快捷键,找了一圈Element UI发现没有能稍微改改就能用的组件,所以自己动手写了一个. 这个只有快捷键展示功能,快捷键实际绑定生效的话是依赖传回的快捷键数据,由另外的组件处理的.目前只测试了Chrome的环境. 效果如下: 关键点 虽然看起来像是一个Input但在组件内实际上是展示一个标签效果,还需要有删除按钮.这就得在输入框内放下html代码,浏览器的Input组件显然不适合,这就只能自己仿一个类Input组件效果了. foc

  • Java中的FileInputStream是否需要close问题

    目录 FileInputStream 类简介 FileInputStream 的 finalize() 方法 实际测试 结论 会有其他问题吗 主动 close 的方式 总结 FileInputStream 类简介 FileInputStream 类在 Java 中非常常用,用来读取文件流的.而这种读取方式往往会涉及到流的关闭 close. 如果不关闭 FileInputStream 流会有问题吗?会导致内存泄漏吗? FileInputStream 的 finalize() 方法 Java 中每个

  • uniapp中input聚焦禁止软键盘弹出方法

    需求:在进入页面时需要input聚焦,但是不弹出软键盘 方法一:使用uniapp自带方法uni.hideKeyboard()来隐藏软键盘 方法二:使用readonly属性规定输入字段为只读 方法三:使用document.activeElement.blur()移开焦点 方法四:通过div模拟input来实现 以上方法网上都有,但是都没有解决我的需求,下面是我使用的方法 方法五:通过定时器来实现隐藏键盘 一般项目通常使用方法一就可以解决,或者日期类型也可以通过以上方法来实现. 我们项目有物理按键,

  • adb shell input keyevent 控制按键输入的数值(收藏版)

    adb shell的功能很强大,可以使用很多功能,今天我们说下通过控制按键输入:adb shell input keyevent xx ,具体数值xx如下 KEYCODE_CALL 进入拨号盘 5 KEYCODE_ENDCALL 挂机键 6 KEYCODE_HOME 按键Home 3 KEYCODE_MENU 菜单键 82 KEYCODE_BACK 返回键 4 KEYCODE_SEARCH 搜索键 84 KEYCODE_CAMERA 拍照键 27 KEYCODE_FOCUS 拍照对焦键 80 K

  • Input系统之InputReader处理按键事件详解

    目录 前言 认识按键事件 处理按键事件 扫描码映射按键码 结束 前言 前面几篇文章已经为 Input 系统的分析打好了基础,现在是时候进行更深入的分析了. 通常,手机是不带键盘的,但是手机上仍然有按键,就是我们经常使用的电源键以及音量键.因此还是有必要分析按键事件的处理流程. 那么,掌握按键事件的处理流程,对我们有什么用处呢?例如,手机上添加了一个功能按键,你知道如何把这个物理按键映射到上层,然后处理这个按键吗?又例如,如果设备是不需要电源键,但是系统默认把某一个按键映射为电源键,那么我们如何使

  • vue中el-input绑定键盘按键(按键修饰符)

    vue怎么写键盘事件 vue允许将按键值作为修饰符来使用,如监听回车事件,有两种写法,如下代码: <input type="text" @keyup.13="console.log($event)"></input> <input type="text" @keyup.enter="console.log($event)"></input> 但要注意的是:当我们在在el-inpu

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

    目录 FileInputStream流的三种read()函数对比 1. int read( )函数 2. read( byte [ ] ) 3. read(byte[ ] ,int off ,int len) FileInputStream中的read()方法 总结 FileInputStream流的三种read()函数对比 首先我们先创建FileIputStream流对文件进行读取 public static void main(String[] args) throws IOExceptio

  • Java中switch的三种用法方式

    Java中switch的三种用法详解: switch居然有三种方式 ? 作为一个接触java不久的人来说,这确实让我吃了一惊! 根据版本,在java14开始, switch语句有了一个很大的调整, 这就让swicth语句有了更多的操作和选择,在代码上,更加的简便灵活, 让我们试试这神奇的switch吧! 使用switch这个关键词, 我们可以很好的解决if-else 中多重选择的尴尬场面! Java中switch的三种用法详解: switch 标准方式 switch - > 用法: switch

  • Java中mybatis的三种分页方式

    目录 前言 一.Limit分页 二.RowBounds分页(不推荐使用) 三.Mybatis_PageHelper分页插件 前言 分页是我们在开发中绕不过去的一个坎!当你的数据量大了的时候,一次性将所有数据查出来不现实,所以我们一般都是分页查询的,减轻服务端的压力,提升了速度和效率!也减轻了前端渲染的压力! 注意:由于 java 允许的最大整数为 2147483647,所以 limit 能使用的最大整数也是 2147483647,一次性取出大量数据可能引起内存溢出,所以在大数据查询场合慎重使用!

  • java 字符串分割的三种方法(总结)

    最近在项目中遇到一个小问题,一个字符串分割成一个数组,类似String str="aaa,bbb,ccc"; 然后以","为分割符,将其分割成一个数组,用什么方法去实现呢? 第一种方法: 可能一下子就会想到使用split()方法,用split()方法实现是最方便的,但是它的效率比较低 第二种方法: 使用效率较高的StringTokenizer类分割字符串,StringTokenizer类是JDK中提供的专门用来处理字符串分割子串的工具类.它的构造函数如下: publ

  • java中常见的6种线程池示例详解

    之前我们介绍了线程池的四种拒绝策略,了解了线程池参数的含义,那么今天我们来聊聊Java 中常见的几种线程池,以及在jdk7 加入的 ForkJoin 新型线程池 首先我们列出Java 中的六种线程池如下 线程池名称 描述 FixedThreadPool 核心线程数与最大线程数相同 SingleThreadExecutor 一个线程的线程池 CachedThreadPool 核心线程为0,最大线程数为Integer. MAX_VALUE ScheduledThreadPool 指定核心线程数的定时

  • Java中Singleton的3种实现方式详解

    一.什么是Singleton? <设计模式>的作者.Eclipse和 Junit 的开发者 Erich Gamma 在它的理论体系中将 Singleton 定义为仅仅被实例化一次的类.在当今面向对象程序的实际开发中,Singleton 通常被用来代表一个无状态的对象,例如函数和那些本质上唯一的系统组件. 值得注意的是,使类成为 Singleton 会使得它的客户端测试变得非常困难,因为我们不可能给Singleton替换模拟实现,除非我们实现一个充当其类型的接口. 实现 Singleton 有三

  • java 引用传递的三种类型小结

    目录 java引用传递的三种类型 第一种 第二种传递方式 第三种传递方式 对于三种引用传递的理解 java引用传值问题 问题起源,一个蠢到家的是失败案例 两类参数传递 基本数据类型 引用数据类型 引用传递 反过来再解决这个案例 java引用传递的三种类型 我这里使用了mldn视频里的例子,只用于学习交流. 第一种 结果:调用前:50 调用后:1000 分析: 理解:好理解 第二种传递方式 先看例子 运行结果: 分析图片: 第三种传递方式 结果: 分析: 对于三种引用传递的理解 第一种和第三种都好

  • 基于java解析JSON的三种方式详解

    本文实例分析了基于java解析JSON的三种方式.分享给大家供大家参考,具体如下: 一.什么是JSON? JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON就是一串字符串 只不过元素会使用特定的符号标注. {} 双括号表示对象 [] 中括号表示数组 "" 双引号内是属性或值 : 冒号表示后者是前者的值(这个值可以是字符串.数字.也可以是另一个数组或对象) 所以 {"name"

  • Java中的FileInputStream 和 FileOutputStream 介绍_动力节点Java学院整理

    FileInputStream 和 FileOutputStream 介绍 FileInputStream 是文件输入流,它继承于InputStream. 通常,我们使用FileInputStream从某个文件中获得输入字节. FileOutputStream 是文件输出流,它继承于OutputStream. 通常,我们使用FileOutputStream 将数据写入 File 或 FileDescriptor 的输出流. FileInputStream 函数接口 FileInputStream

  • 浅谈Java实体对象的三种状态以及转换关系

    最新的Hibernate文档中为Hibernate对象定义了四种状态(原来是三种状态,面试的时候基本上问的也是三种状态),分别是:瞬时态(new, or transient).持久态(managed, or persistent).游状态(detached)和移除态(removed,以前Hibernate文档中定义的三种状态中没有移除态),如下图所示,就以前的Hibernate文档中移除态被视为是瞬时态. 瞬时态:当new一个实体对象后,这个对象处于瞬时态,即这个对象只是一个保存临时数据的内存区

随机推荐