Java中IO流-13-FileInputStream类

     这篇,我们开始学习IO包下常见的类和常见的方法,第一个要学习的就是InputStream这个抽象类下的子类和相关方法。由于是抽象类,所以不能用来创建实例对象,所以我们需要学习这个抽象类的子类。这篇开始学习FileInputStream类。

1.API基本介绍

       打开JAVA JDK API文件,搜索并找到FileInputStream类。可以看到这么一句话: FileInputStream从文件系统中的某个文件中获得输入字节.注意这里是字节,如果要使用字符流,需要使用FileReader,这个后面后续文件再学习。我们还可以看到FileInputStream类有三个构造函数,还有几个成员方法,我们重点学习Read开头的相关方法。


2.FileInputStream代码练习

      主要是练习其中一个构造函数和read方法,read方法看AP文档说,读取的是一个字节。一个字节让我们想起了一个英文单词存储就是占用一个字节。所以,我们在当前Java项目下创建一个abc.txt,里面内容也写abc,然后保存关闭。运行下面代码:

package io;

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

public class Demo1_FileInputStream {

	public static void main(String[] args) throws IOException {
		//创建流对象,这里我们利用第三个构造函数,参数就是一个字符串形式的文件路径
		FileInputStream  fis = new FileInputStream("abc.txt"); 
		// 用int类型变量去接收read()返回值,每次读取一个字节
		int x = fis.read();
		System.out.println(x);

	}

}

       运行输出97,我们知道小写字母a,在ASCII码表中就是用数字97代替。然后我们试试读取b和c字符是不是符合这个原理。

package io;

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

public class Demo1_FileInputStream {

	public static void main(String[] args) throws IOException {
		//创建流对象,这里我们利用第三个构造函数,参数就是一个字符串形式的文件路径
		FileInputStream  fis = new FileInputStream("abc.txt"); 
		// 用int类型变量去接收read()返回值,每次读取一个字节
		int x = fis.read();
		System.out.println(x);
		
		int y = fis.read();
		System.out.println(y);
		
		int z = fis.read();
		System.out.println(z);
		//记得要关闭文件 释放资源
		fis.close();
	}

}

      运行的确是输出 97 98 99, 所以,我们应该掌握了read()方法每次读取一个字节的功能,也知道返回值是int类型原因。上面的代码重复代码太多,我们想消去重复代码,所以想用循环去实现,但是这个循环条件是什么呢。下面我们看看尝试读取abc之后的第四个和第五个内容返回的int类型是什么。

package io;

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

public class Demo1_FileInputStream {

	public static void main(String[] args) throws IOException {
		//创建流对象,这里我们利用第三个构造函数,参数就是一个字符串形式的文件路径
		FileInputStream  fis = new FileInputStream("abc.txt"); 
		// 用int类型变量去接收read()返回值,每次读取一个字节
		int x = fis.read();
		System.out.println(x);
		
		int y = fis.read();
		System.out.println(y);
		
		int z = fis.read();
		System.out.println(z);
		//第四个字节是什么
		int a = fis.read();
		System.out.println(a);
		//第五个字节是什么
		int b = fis.read();
		System.out.println(b);
		//记得要关闭文件 释放资源
		fis.close();
	}

}

      运行发现第4个和第5个字节打印的是-1,这里我们要知道,文件结尾的标记符号就是-1,遇到-1说明文件结束了,后面没有内容了。这个条件就是我们循环需要找的条件,所以,下面代码优化如下。

package io;

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

public class Demo1_FileInputStream {

	public static void main(String[] args) throws IOException {
		//创建流对象,这里我们利用第三个构造函数,参数就是一个字符串形式的文件路径
		FileInputStream  fis = new FileInputStream("abc.txt"); 
		int b;
		
		while( (b = fis.read()) != -1) {
			System.out.println(b);
		}
		
		//记得要关闭文件 释放资源
		fis.close();
	}

}

     关于FileInputStream,我们学习了其中一个构造方法和read()和close方法,read()方法每次只能读取一个字节,返回类型是int类型。还知道了文件结束标记符号是-1。但是上面这种读取文件的效率是不是太低了,目前来看,确实是这样。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值