Java输入输出流——文件输入流FileInputStream
FileInputStream概述
1. FileInputStream作用
(1) 从文件系统中的某个文件中获得输入字节。
例如:复制粘贴
(2) 用于读取注入图像数据之类的原始字节流。
(3) 查看api
FileInputStream在java.io包里。
2. FileInputStream的常用方法简介
方法名 | 描述 |
---|---|
public int read() | 从输入流中读取一个数据字节 |
public int read(byte[] b) | 从输入流中将最多b.length个字节的数据读入一个byte数组中 |
public int read(byte[] b, int off, int len) | 从输入流中将最多len个字节的数据读入一个byte数组中 |
public void close() | 关闭此文件输入流并释放与此流有关的所有系统资源 |
注:如果read()方法的返回值为-1,则表示已经达到文件末尾。这也是文件是否读完的标志。
FileInputStream案例
前置条件
在工程目录D:\学习\eclipse_studyspace\IOProj
下新建study.txt文件,里边有内容Hello,study!
。
read()读取文件
package com.study.myfile;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputDemo1 {
public static void main(String[] args) {
//创建一个FileInputStream对象
try {
FileInputStream fis = new FileInputStream("study.txt");
//读取数据
int n = fis.read();
System.out.println((char)n);
fis.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注:
(1) 这里要写IOException,而且要写在FileNotFoundException后面,因为FileNotFoundException是IOException的子类。
(2) 因为文件study.txt中的内容Hello,study!
是字符类型的数据,而read()方法的返回值是int类型的数据,因此输出时需要将其进行强制转换。
(3) 要记得使用close()方法关闭输入流,释放资源。
运行结果:
H
循环读取文件中内容
(1) 方式1:int n = fis.read();while(n!=-1){}
try {
FileInputStream fis = new FileInputStream("study.txt");
//循环读取数据
int n = fis.read();
while(n!=-1) {
System.out.print((char)n);
n=fis.read();
}
fis.close();
}
运行结果:
Hello,study!
(2) 方式2:while((n=fis.read())!=-1){}
try {
FileInputStream fis = new FileInputStream("study.txt");
//循环读取数据
int n = 0;
while((n=fis.read())!=-1) {
System.out.print((char)n);
}
fis.close();
}
read(byte[] b)读取文件
try {
FileInputStream fis = new FileInputStream("study.txt");
byte[] b = new byte[100];
fis.read(b);
System.out.println(new String(b));
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
运行结果:
Hello,study!
read(byte[] b, int off, int len)读取文件
这里off是指从byte数组的第几个数据开始(off=0就是从第1个数据开始读取),len是长度。
try {
FileInputStream fis = new FileInputStream("study.txt");
byte[] b = new byte[100];
fis.read(b, 0, 5);
System.out.println(new String(b));
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
运行结果:
Hello