咦咦咦,各位小可爱,我是你们的好伙伴------bug菌,今天又来给大家普及Java之IO流啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~
🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!
js
环境说明: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
有两个构造方法:
java
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
读取文件:
java
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
的功能,如下是我用来演示的测试用例,大家请看:
java
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电子书籍、简历模板等海量资料。