Java中的FileInputStream 和 FileOutputStream 介绍_动力节点Java学院整理
发布时间 - 2026-01-11 01:02:48 点击率:次FileInputStream 和 FileOutputStream 介绍

FileInputStream 是文件输入流,它继承于InputStream。
通常,我们使用FileInputStream从某个文件中获得输入字节。
FileOutputStream 是文件输出流,它继承于OutputStream。
通常,我们使用FileOutputStream 将数据写入 File 或 FileDescriptor 的输出流。
FileInputStream 函数接口
FileInputStream(File file) // 构造函数1:创建“File对象”对应的“文件输入流” FileInputStream(FileDescriptor fd) // 构造函数2:创建“文件描述符”对应的“文件输入流” FileInputStream(String path) // 构造函数3:创建“文件(路径为path)”对应的“文件输入流” int available() // 返回“剩余的可读取的字节数”或者“skip的字节数” void close() // 关闭“文件输入流” FileChannel getChannel() // 返回“FileChannel” final FileDescriptor getFD() // 返回“文件描述符” int read() // 返回“文件输入流”的下一个字节 int read(byte[] buffer, int byteOffset, int byteCount) // 读取“文件输入流”的数据并存在到buffer,从byteOffset开始存储,存储长度是byteCount。 long skip(long byteCount) // 跳过byteCount个字节
FileOutputStream 函数接口
FileOutputStream(File file) // 构造函数1:创建“File对象”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。 FileOutputStream(File file, boolean append) // 构造函数2:创建“File对象”对应的“文件输入流”;指定“追加模式”。 FileOutputStream(FileDescriptor fd) // 构造函数3:创建“文件描述符”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。 FileOutputStream(String path) // 构造函数4:创建“文件(路径为path)”对应的“文件输入流”;默认“追加模式”是false,即“写到输出的流内容”不是以追加的方式添加到文件中。 FileOutputStream(String path, boolean append) // 构造函数5:创建“文件(路径为path)”对应的“文件输入流”;指定“追加模式”。 void close() // 关闭“输出流” FileChannel getChannel() // 返回“FileChannel” final FileDescriptor getFD() // 返回“文件描述符” void write(byte[] buffer, int byteOffset, int byteCount) // 将buffer写入到“文件输出流”中,从buffer的byteOffset开始写,写入长度是byteCount。 void write(int oneByte) // 写入字节oneByte到“文件输出流”中
示例程序
关于FileInputStream和FileOutputStream的API用法,参考示例代码(FileStreamTest.java):
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.PrintStream;;
import java.io.IOException;
/**
* FileInputStream 和FileOutputStream 测试程序
*
*
*/
public class FileStreamTest {
private static final String FileName = "file.txt";
public static void main(String[] args) {
testWrite();
testRead();
}
/**
* FileOutputStream 演示函数
*
* 运行结果:
* 在源码所在目录生成文件"file.txt",文件内容是“abcdefghijklmnopqrstuvwxyz”
*
* 加入,我们将 FileOutputStream fileOut2 = new FileOutputStream(file, true);
* 修改为 FileOutputStream fileOut2 = new FileOutputStream(file, false);
* 然后再执行程序,“file.txt”的内容变成"0123456789"。
* 原因是:
* (01) FileOutputStream fileOut2 = new FileOutputStream(file, true);
* 它是以“追加模式”将内容写入文件的。即写入的内容,追加到原始的内容之后。
* (02) FileOutputStream fileOut2 = new FileOutputStream(file, false);
* 它是以“新建模式”将内容写入文件的。即删除文件原始的内容之后,再重新写入。
*/
private static void testWrite() {
try {
// 创建文件“file.txt”对应File对象
File file = new File(FileName);
// 创建文件“file.txt”对应的FileOutputStream对象,默认是关闭“追加模式”
FileOutputStream fileOut = new FileOutputStream(file);
// 创建FileOutputStream对应的PrintStream,方便操作。PrintStream的写入接口更便利
PrintStream out1 = new PrintStream(fileOut1);
// 向“文件中”写入26个字母
out1.print("abcdefghijklmnopqrstuvwxyz");
out1.close();
// 创建文件“file.txt”对应的FileOutputStream对象,打开“追加模式”
FileOutputStream fileOut2 = new FileOutputStream(file, true);
// 创建FileOutputStream对应的PrintStream,方便操作。PrintStream的写入接口更便利
PrintStream out2 = new PrintStream(fileOut2);
// 向“文件中”写入"0123456789"+换行符
out2.println("0123456789");
out2.close();
} catch(IOException e) {
e.printStackTrace();
}
}
/**
* FileInputStream 演示程序
*/
private static void testRead() {
try {
// 方法:新建FileInputStream对象
// 新建文件“file.txt”对应File对象
File file = new File(FileName);
FileInputStream in1 = new FileInputStream(file);
// 方法2:新建FileInputStream对象
FileInputStream in2 = new FileInputStream(FileName);
// 方法3:新建FileInputStream对象
// 获取文件“file.txt”对应的“文件描述符”
FileDescriptor fdin = in2.getFD();
// 根据“文件描述符”创建“FileInputStream”对象
FileInputStream in3 = new FileInputStream(fdin);
// 测试read(),从中读取一个字节
char c1 = (char)in1.read();
System.out.println("c1="+c1);
// 测试skip(long byteCount),跳过4个字节
in1.skip(25);
// 测试read(byte[] buffer, int byteOffset, int byteCount)
byte[] buf = new byte[10];
in1.read(buf, 0, buf.length);
System.out.println("buf="+(new String(buf)));
// 创建“FileInputStream”对象对应的BufferedInputStream
BufferedInputStream bufIn = new BufferedInputStream(in3);
// 读取一个字节
char c2 = (char)bufIn.read();
System.out.println("c2="+c2);
in1.close();
in2.close();
in3.close();
} catch(IOException e) {
e.printStackTrace();
}
}
}
运行结果:
c1=a buf=0123456789 c2=a
结果说明:
运行程序,会在源码所在位置新生成一个文件“file.txt”。它的内容是“abcdefghijklmnopqrstuvwxyz0123456789”。
以上所述是小编给大家介绍的Java中的FileInputStream 和 FileOutputStream 介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# java
# fileinputstream
# fileoutputstream
# java中的FileInputStream三种read()函数用法
# java中的FileInputStream(输入流)
# java基础知识之FileInputStream流的使用
# Java FileInputStream与FileOutputStream使用详解
# Java基础之FileInputStream和FileOutputStream流详解
# Java FileInputStream读中文乱码问题解决方案
# Java使用FileInputStream流读取文件示例详解
# Java中的FileInputStream是否需要close问题
# 写到
# 小编
# 跳过
# 在此
# 会在
# 给大家
# 然后再
# 所述
# 给我留言
# 感谢大家
# 再重新
# 疑问请
# 有任何
# 换行符
# read
# byte
# buffer
# getFD
# FileChannel
# close
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
JavaScript如何实现错误处理_try...catch如何捕获异常?
nginx修改上传文件大小限制的方法
HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】
如何用PHP工具快速搭建高效网站?
Laravel如何使用Eloquent进行子查询
canvas 画布在主流浏览器中的尺寸限制详细介绍
如何在腾讯云服务器上快速搭建个人网站?
青岛网站建设如何选择本地服务器?
微信小程序 五星评分(包括半颗星评分)实例代码
JavaScript如何实现类型判断_typeof和instanceof有什么区别
黑客如何利用漏洞与弱口令入侵网站服务器?
Laravel如何使用withoutEvents方法临时禁用模型事件
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Android仿QQ列表左滑删除操作
Laravel安装步骤详细教程_Laravel环境搭建指南
焦点电影公司作品,电影焦点结局是什么?
网站建设保证美观性,需要考虑的几点问题!
,交易猫的商品怎么发布到网站上去?
Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)
北京专业网站制作设计师招聘,北京白云观官方网站?
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
BootStrap整体框架之基础布局组件
北京企业网站设计制作公司,北京铁路集团官方网站?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
西安专业网站制作公司有哪些,陕西省建行官方网站?
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
如何在万网主机上快速搭建网站?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
Laravel如何自定义分页视图?(Pagination示例)
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
html5的keygen标签为什么废弃_替代方案说明【解答】
如何快速上传自定义模板至建站之星?
再谈Python中的字符串与字符编码(推荐)
如何快速搭建高效简练网站?
魔方云NAT建站如何实现端口转发?
Windows Hello人脸识别突然无法使用
用yum安装MySQLdb模块的步骤方法
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
实例解析Array和String方法
浅谈redis在项目中的应用
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
网站页面设计需要考虑到这些问题
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
百度输入法ai组件怎么删除 百度输入法ai组件移除工具

