咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java之IO流啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8
前言
在Java应用程序开发中,输入输出(I/O)操作是必不可少的一部分。Java语言的I/O
模型基于流(Stream
),其中InputStream
和OutputStream
是两个基本抽象类。这些类使Java程序员可以在他们的应用程序中读写数据,无论是从文件,网络或其他源。
本文将深入探讨Java I/O
中的FileInputStream
。FileInputStream
是InputStream
的一个子类,它为Java程序员提供了从文件读取数据的方法。
摘要
在本文中,我们将探讨FileInputStream
的用途,功能和特性。我们还将介绍如何使用FileInputStream
从文件中读取数据,并提供一些使用FileInputStream
的最佳实践。
FileInputStream
用途和功能
FileInputStream类提供了一种从文件读取数据的方式。FileInputStream的主要功能包括:
- 从文件读取文件内容
- 以字节为单位读取文件内容
- 支持随机访问
- 支持mark和reset方法
构造方法
FileInputStream
有两个构造方法:
FileInputStream(File file) throws FileNotFoundException
FileInputStream(String name) throws FileNotFoundException
这些构造函数接受文件的名称或文件对象,并打开文件进行读取。
常用方法
FileInputStream的常用方法包括:
int read()
:读取单个字节。int read(byte[] b)
:将最多b.length个字节读入byte数组中。int read(byte[] b, int off, int len)
:将最多len个字节读入byte数组中,从偏移量off开始存储。long skip(long n)
:跳过n个字节的输入。int available()
:返回可用的字节数。void close()
:关闭文件输入流。
最佳实践
使用以下最佳实践在Java应用程序中使用FileInputStream
:
- 在读取文件之前,始终检查文件是否存在。
- 使用
try-with-resources
语句块关闭文件输入流,以确保在读取文件时始终关闭文件。
使用FileInputStream
读取文件
以下示例演示如何使用FileInputStream
读取文件:
package com.example.javase.io;
import java.io.FileInputStream;
import java.io.IOException;
/**
* @author bug菌
* @version 1.0
* @date 2023/10/13 15:56
*/
public class FileInputStreamTest {
public static void main(String[] args) {
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream("./template/hello.txt");
int content;
while ((content = inputStream.read()) != -1) {
System.out.print((char) content);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
上述代码使用FileInputStream
读取名为hello.txt
的文件。程序先检查文件是否存在,然后逐个字节读取文件内容并将结果打印到控制台。最后,关闭文件输入流以释放系统资源。
执行结果如下:
很明显对比hello.txt
文本内容读取内容是完整且准确无误的。
测试用例
如下便用FileInputStream 类进行文件的写入及读取功能进行示例演示,希望能够让大家更深入的了解它,真正把它学会并掌握。
用例代码
为了验证FileInputStream
的功能,如下是我用来演示的测试用例,大家请看:
package com.example.javase.io.fileInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* @author bug菌
* @version 1.0
* @date 2023/10/13 16:31
*/
public class testReadFile {
public static void main(String[] args) {
String content = "Hello, jym! ";
byte[] contentBytes = content.getBytes();
FileOutputStream outputStream = null;
try {
outputStream = new FileOutputStream("./template/hello.txt");
outputStream.write(contentBytes);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (outputStream != null) {
outputStream.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream("./template/hello.txt");
byte[] buffer = new byte[contentBytes.length];
inputStream.read(buffer);
String result = new String(buffer);
System.out.println("content:" + content);
System.out.println("result:" + result);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
测试代码解析
该代码实现了一个简单的读写文件的功能。具体步骤如下:
定义字符串 content
,将其转化为字节数组 contentBytes
。
创建一个 FileOutputStream
对象 outputStream
,用于在本地磁盘上创建或打开一个名为 hello.txt
的文件,并将 contentBytes
数组中的内容写入该文件。
关闭 outputStream
对象。
创建一个 FileInputStream
对象 inputStream
,用于读取 hello.txt
文件中的内容。
创建一个字节数组 buffer
,长度与 contentBytes
相同。
使用 inputStream
对象的 read() 方法将 hello.txt
中的内容读入 buffer
数组。
将 buffer
数组转化为字符串 result
。
输出 content
和 result
进行对比是否相同,如果不同则抛出异常。
关闭 inputStream
对象。
测试结果
执行如上测试用例,可以得知,与我们写入时的内容是一致的。
小结
FileInputStream
是Java I/O中的一个重要类,它允许Java程序员从文件中读取数据。本文介绍了如何使用FileInputStream
和一些最佳实践。本文还提供了一个简单的测试用例,以验证FileInputStream
的功能。
总结
在本文中,我们深入探讨了Java I/O中的FileInputStream
,并介绍了它的用途,功能和特性。我们还介绍了如何使用FileInputStream
从文件中读取数据,并提供了一些最佳实践。最后,我们编写了一个测试用例来验证FileInputStream
的功能。
... ...
ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。
「赠人玫瑰,手留余香」,咱们下期拜拜~~
附录源码
如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。
☀️建议/推荐你
无论你是计算机专业的学生,还是对编程有兴趣的小伙伴,都建议直接毫无顾忌的学习此专栏「滚雪球学Java」,bug菌郑重承诺,凡是学习此专栏的同学,均能获取到所需的知识和技能,全网最快速入门Java编程,就像滚雪球一样,越滚越大,指数级提升。
最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。
📣关于我
我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。