FileInputStream类用来读取本地文件中的数据。
读取数据有两个方法,分别是read()和read(byte[] buffer)。
关于read()方法的一些细节:
- 一次只能读取一个字节的数据。
- 返回值就是数据在ASCII码表中对应的整数。
- 当读取到文件末尾,已经没有数据却再次调用read方法时,会返回-1,所以会用-1来判断是否到了文件末尾。
- 读取的本地文件不存在会直接报错。
应用:循环读取
类似于迭代器中的指针,读取后会直接将指针+1。
while (true) {
int r = fis.read();
if ( r != -1){
System.out.println(r);
} else {
break;
}
}
还可以这样写,用一个局部变量去接收。反正就是不能一次循环中调用两次read()方法。
int r;
while ((r = fis.read()) != -1) {
System.out.println(r);
}
释放资源的时候一般先开的资源最后释放。
关于read(byte[] buffer)方法:
无参的read方法一次只能读取一个字节,速度有点慢,还有一个有参的read方法:read(byte[] buffer),一次可以读取指定长度的字节放到数组当中,一般长度为1024的整数倍,比如1024*1024*5=5MB。此方法的返回值是读取的字节个数。
应用:文件拷贝
public class IO3 {
public static void main(String[] args) throws IOException {
FileOutputStream fos = new FileOutputStream("aaa/a.txt");
FileInputStream fis = new FileInputStream("C:\\Users\\Administrator\\Desktop\\123.txt");
int len;
byte[] bytes = new byte[1024 * 1024 * 5];
while ((len = fis.read(bytes)) != -1) {
fos.write(bytes,0,len);
}
fis.close();
fos.close();
}
}
刚开始想读取pdf,但是好像不行,等我学会以后直接pdf转word。