使用Java中的FileInputStream读取文件数据
Java提供了字节流和字符流两种不同的IO流。字节流可以读取和写入8位二进制数据,适用于读取和写入图像文件、音频文件、视频文件等二进制文件。字符流则可以读取和写入16位Unicode字符数据,适用于读取和写入文本文件。
FileInputStream是Java中的字节流输入流,用于从文件中读取数据。FileInputStream是InputStream的子类,它可以从文件中读取字节数据。使用FileInputStream的两个常用构造函数如下:
public FileInputStream(String name) throws FileNotFoundException; public FileInputStream(File file) throws FileNotFoundException;
FileInputStream抛出文件不存在或者没有读取权限的FileNotFoundException异常,因此在使用FileInputStream时应该正确处理异常。
try {
FileInputStream fileInputStream = new FileInputStream(file);
//读取数据
} catch (FileNotFoundException e) {
e.printStackTrace();
}
FileInputStream读取文件的步骤如下:
1.创建FileInputStream对象,指定文件路径或File对象。
2.调用read方法以字节为单位从流中读取数据,并返回读取的数据字节数。如果读取到文件的末尾,则返回-1。
int data = fileInputStream.read();
while (data != -1) {
System.out.print((char) data);
data = fileInputStream.read();
}
3.在读取数据完成后,关闭输入流。关闭文件输入流前,应该确保所有的文件操作已经完成,否则可能会导致数据丢失或者不完整。
fileInputStream.close();
如果想要一次读取多个字节,可以使用read(byte[] b)方法,该方法将读取的字节存储在指定的字节数组中,并返回实际读取的字节数。
byte[] buffer = new byte[1024];
int length = fileInputStream.read(buffer);
while (length != -1) {
System.out.print(new String(buffer, 0, length));
length = fileInputStream.read(buffer);
}
上面的代码每次读取1024个字节,直到文件末尾。在读取二进制文件时,应该使用byte数组来读取数据,而不是使用char数组。使用char数组会导致数据损坏。
在使用FileInputStream读取文件时,需要注意以下几点:
1.如果文件中包含中文等非ASCII字符,使用InputStream无法正确读取。应该使用Reader来读取字符数据。
2.读取大文件时,一次性将整个文件读取到内存中可能会导致内存不足异常。应该循环读取文件的一部分,然后处理该部分数据。
3.文件操作完毕后应该关闭输入流。关闭输入流前,应该确保所有的文件操作已经完成,否则可能会导致数据丢失或者不完整。
FileInputStream是Java中读取二进制文件的常用工具,只需要掌握其基本用法即可读取并处理各类二进制文件。同时,使用FileInputStream时应该注意异常处理和资源释放问题。
