大家好,又见面了,我是你们的朋友全栈君。
一 FileInputStream概述
FileInputStream:从文件系统中的文件获取输入字节。 可用的文件取决于主机环境。 FileInputStream用于读取诸如图像数据的原始字节流。 要读取字符流,请考虑使用FileReader。
二 FileInputStream的构造方法
1. FileInputStream(File file)
通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的 File对象 file命名。
2. FileInputStream(FileDescriptor ds)
使用文件描述符 fdObj创建 FileInputStream ,该文件描述符表示与文件系统中实际文件的现有连接。
3. FileInputStream(String name)
通过打开与实际文件的连接来创建 FileInputStream ,该文件由文件系统中的路径名 name命名。
三 FileInputStream的常用方法
1. public int read() throws IOException
1)作用:
从此输入流中读取一个字节的数据。 如果尚未提供输入,此方法将阻止。
2)输出:
数据的下一个字节,如果到达文件的末尾, -1 。
3)异常:
IOException – 如果发生I / O错误。
该方法不常用,因为一次只读一个字节,会频繁地进行和磁盘打交道,读取效率低下。
2. public int read(byte[] b) throws IOException
1)作用:
从此输入流b.length最多b.length个字节的数据读入一个字节数组。
2)参数:
b – 读取数据的字节数组,缓冲区。
3)返回值:
读入缓冲区的总字节数,如果由于文件末尾已到达而没有更多数据,则返回 -1 。
4)异常:
IOException – 如果发生I / O错误。
3. public int available() throws IOException
1)作用:
返回可以从此输入流中读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞。 当文件位置超出EOF时返回0。 下一次调用可能是同一个线程或另一个线程。
2)返回值:
估计可以从此输入流中无阻塞地读取(或跳过)的剩余字节数。
3)异常:
如果通过调用 close关闭此文件输入流或发生I / O错误。
4. public long skip(long n) throws IOException
1)作用:
跳过并从输入流中丢弃n字节的数据。
出于各种原因, skip方法可能最终跳过一些较小数量的字节,可能是0 。 如果n为负数,则该方法将尝试向后跳过。 如果后备文件不支持在其当前位置向后跳过,则抛出IOException 。 返回跳过的实际字节数。 如果它向前跳过,则返回正值。 如果它向后跳过,则返回负值。 此方法可能会跳过比后备文件中剩余的更多的字节。 这不会产生异常,跳过的字节数可能包括超出后备文件EOF的一些字节数。 跳过结束后尝试从流中读取将导致-1表示文件结束。
2)参数
n-要跳过的字节数
3)返回值
跳过的实际字节数
4)异常
IOException – 如果n为负数,如果流不支持搜索,或者发生I / O错误。
5. public void close() throws IOException
1)作用
关闭此文件输入流并释放与该流关联的所有系统资源。
四 案例
1. 使用public int read() throws IOException
代码语言:javascript复制package cn.donglinode.IO;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamDemo01 {
public static void main(String[] args) {
//文件路径
String path="chapter16/src/tempFile.text";
FileInputStream fis=null;
try {
//创建FileInputStream对象
fis=new FileInputStream(path);
//保存读到的字节值
int res=0;
while((res=fis.read())!=-1){
System.out.println(res);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流
try {
if (fis!=null){
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
输出结果:
2. 使用public int read(byte[] b) throws IOException
代码语言:javascript复制package cn.donglinode.IO;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class FileInputStreamDemo02 {
public static void main(String[] args) {
//文件路径
String path="chapter16/src/tempFile.text";
FileInputStream fis=null;
try {
//创建FileInputStream对象
fis=new FileInputStream(path);
//定义一个字节数组用来保存读取到的数据
byte[] bytes=new byte[4];
//读取到的字节数
int readCount=0;
while((readCount=fis.read(bytes))!=-1){
System.out.println(new String(bytes,0,readCount));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
输出结果:
注意:在IDEA中,当前路径是project的根目录
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135622.html原文链接:https://javaforall.cn