京东网站设计代码,南京图文制作中心,seo排名点击手机,做一个微信商城小程序多少钱#x1f3c6;本文收录于「滚雪球学Java」专栏#xff0c;专业攻坚指数级提升#xff0c;助你一臂之力#xff0c;带你早日登顶#x1f680;#xff0c;欢迎大家关注收藏#xff01;持续更新中#xff0c;up#xff01;up#xff01;up#xff01;#xf… 本文收录于「滚雪球学Java」专栏专业攻坚指数级提升助你一臂之力带你早日登顶欢迎大家关注收藏持续更新中upupup
环境说明Windows 10 IntelliJ IDEA 2021.3.2 Jdk 1.8文章目录 前言摘要FileOutputStream1. Java IO包基础2. FileOutputStream类介绍2.1 创建FileOutputStream对象2.2 写入数据2.3 关闭FileOutputStream 3. 常用方法应用场景优缺点分析优点缺点 4. 示例代码5. 测试用例5.1 用例代码5.2 代码解析5.3 测试结果 6. 源码分析6.1 构造函数6.2 write() 方法6.3 其他方法6.4 源码截图 全文小结 总结附录源码 ☀️建议/推荐你关于我 咦咦咦各位小可爱我是你们的好伙伴——bug菌今天又来给大家普及Java之IO流啦别躲起来啊听我讲干货还不快点赞赞多了我就有动力讲得更嗨啦所以呀养成先点赞后阅读的好习惯别被干货淹没了哦~ 前言 Java是一门广泛应用于开发各种应用程序的编程语言也广泛应用于文件操作方面其中FileOutputStream是Java IO包中常用的类之一。本文将介绍如何使用FileOutputStream类来操作文件流以方便开发人员更加轻松地读写文件。
摘要 本文主要介绍了Java中文件操作的基本知识和FileOutputStream类的使用方法。在介绍FileOutputStream类之前我们先了解了Java IO包中的一些基本的类比如InputStream、OutputStream、File、FileReader等等。在具体的介绍中我们详细讲解了如何使用FileOutputStream来写入文件并给出了相应的示例代码。最后我们还介绍了一些FileOutputStream类的常用方法。
FileOutputStream
1. Java IO包基础 Java IO包是Java编程语言中用于读写数据的API。它提供了一个非常简单和易于使用的接口以帮助我们轻松地读写文件。在Java IO包中常用的类有InputStream、OutputStream、Reader和Writer它们都是抽象类。另外Java IO包中还包含了一些具体的类如File、FileInputStream、FileOutputStream等。
2. FileOutputStream类介绍 FileOutputStream类是Java IO包中用于写入文件的类。通过FileOutputStream类我们可以将数据写入到文件中。
2.1 创建FileOutputStream对象
FileOutputStream fos new FileOutputStream(example.txt);2.2 写入数据
String data Hello, world!;
byte[] bytes data.getBytes();
fos.write(bytes);2.3 关闭FileOutputStream
写入完成后需要关闭FileOutputStream以释放资源。
fos.close();3. 常用方法
常用的方法有
write(byte[] b): 将字节数组写入数据流。write(byte[] b, int off, int len): 将字节数组中的一部分写入数据流。flush(): 刷新数据流。close(): 关闭输出流。
应用场景 FileOutputStream是Java IO库中的一个类它用于写入二进制数据到文件中。以下是FileOutputStream的应用场景分析
文件写入FileOutputStream被广泛用于将数据写入文件特别是在需要将二进制数据写入文件中时。网络传输FileOutputStream也可以用来将二进制数据写入网络流中传输一些常见的网络编程框架使用FileOutputStream来实现数据的写入。数据库存储将二进制数据写入数据库中也是FileOutputStream的应用之一。
优缺点分析
优点
速度快FileOutputStream是Java IO库中最快的输出流之一因为它不会像BufferedOutputStream一样缓存数据直接写入。支持二进制数据FileOutputStream可以写入任何类型的数据包括二进制数据。灵活性高FileOutputStream可以通过多种方式进行数据写入例如按字节写入、按字符写入等。
缺点
不支持缓存FileOutputStream不支持数据缓存这意味着每次写入操作都需要打开文件并写入数据增加了文件I/O的开销。不能在文件中追加数据FileOutputStream只会覆盖文件中原有的数据不能在文件最后面追加数据。不支持高级的字符处理FileOutputStream只能处理字节数据而不能处理字符数据必须通过其他类如OutputStreamWriter进行处理。 综上所述FileOutputStream是Java IO库中功能强大的输出流之一可用于高效地将二进制数据写入文件、网络流或数据库中。但是它不支持缓存和追加数据等高级功能。因此在选择输出流时要权衡其优势和劣势。
4. 示例代码
下面是一个示例代码展示了如何使用FileOutputStream将数据写入文件中。
import java.io.FileOutputStream;
import java.io.IOException;public class FileWriterExample {public static void main(String[] args) throws IOException {FileOutputStream fos new FileOutputStream(example.txt);String data Hello, world!;byte[] bytes data.getBytes();fos.write(bytes);fos.close();}
}测试运行结果如下 5. 测试用例
5.1 用例代码 我们可以编写一些测试用例来确保代码的正确性。下面是一个简单的测试用例展示了如何验证代码是否按预期工作。
package com.example.javase.io.fileOutputStream;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;/*** Author bug菌* Date 2023-10-15 19:40*/
public class FileOutputStreamTest {public static void main(String[] args) throws IOException {String data Hello, worldjym!;File file new File(./template/hello.txt);FileOutputStream fos new FileOutputStream(file);fos.write(data.getBytes());fos.close();FileInputStream fis new FileInputStream(file);byte[] buffer new byte[1024];fis.read(buffer);String result new String(buffer).trim();fis.close();if (data.equals(result)) {System.out.println(Pass);} else {System.out.println(Fail);}}
}5.2 代码解析 该代码演示了如何使用Java的FileOutputStream类来写文件以及使用FileInputStream类来读文件。首先创建了一个字符串数据然后使用FileOutputStream将其写入到文件中。写入完成后使用FileInputStream读取文件中的内容并将读取结果与原始数据进行比较以确认写入和读取都成功。最后根据比较结果输出相应的信息Pass 或 Fail。
5.3 测试结果
如上测试用例测试结果如下 6. 源码分析 FileOutputStream 是一个 Java IO 中的输出流类用于将数据写入到文件中。下面是它的源码分析
6.1 构造函数
public FileOutputStream(String name) throws FileNotFoundException {this(name ! null ? new File(name) : null, false);
}public FileOutputStream(String name, boolean append) throws FileNotFoundException {this(name ! null ? new File(name) : null, append);
}public FileOutputStream(File file) throws FileNotFoundException {this(file, false);
}public FileOutputStream(File file, boolean append) throws FileNotFoundException {String name (file ! null ? file.getPath() : null);SecurityManager security System.getSecurityManager();if (security ! null) {security.checkWrite(name);}if (name null) {throw new NullPointerException();}if (file.isInvalid()) {throw new FileNotFoundException(Invalid file path);}this.fd new FileDescriptor();this.append append;open(name, append);
}该类提供了多个构造函数用户可以根据需要选择。其中最重要的是最后一个构造函数它接受一个 File 对象和一个 boolean 值用于指定是否以追加模式打开文件。在构造函数中会根据传入的文件路径进行权限检查然后打开文件并将文件描述符保存在一个 FileDescriptor 对象中。
6.2 write() 方法
public void write(int b) throws IOException {write(new byte[] {(byte) b}, 0, 1);
}public void write(byte b[]) throws IOException {write(b, 0, b.length);
}public void write(byte b[], int off, int len) throws IOException {if (b null) {throw new NullPointerException();} else if (off 0 || len 0 || off b.length - len) {throw new IndexOutOfBoundsException();} else if (len 0) {return;}Object traceContext IoTrace.fileWriteBegin(path);int written 0;try {ensureOpen();while (written len) {int bytesToWrite Math.min(len - written, MAX_BUFFER_SIZE);fd.sync(); // not required for O_APPENDint bytesWritten writeBytes(b, off written, bytesToWrite);written bytesWritten;if (bytesWritten ! bytesToWrite) {// If we didnt write what we wanted (and were not closed), we should// throw an IOException. But we should not throw it if were closed.// This is consistent with the behavior of SocketOutputStream.if (written len) {throw new IOException(File system full);}break;}}if (shouldCloseFD) {// we will no longer be writing to this FileOutputStream, so we should// release our hold on the underlying fd. This is not strictly necessary,// but its good citizenship. :-)close();}} catch (IOException ioe) {IoTrace.fileWriteEnd(traceContext, written);throw ioe;}IoTrace.fileWriteEnd(traceContext, written);
}在 write() 方法中会先进行参数检查然后调用 ensureOpen()方法确保文件已经打开接着使用一个循环来写入数据。其中MAX_BUFFER_SIZE 的值为 8192即一次最多写入 8KB 的数据。每轮循环会先调用 fd.sync() 方法将缓冲区的数据刷新到磁盘再调用 writeBytes() 方法将数据写入文件中。在写入数据时如果写入的字节数小于要写入的字节数说明文件系统已经满了此时会抛出一个 IOException 异常。
6.3 其他方法 FileOutputStream 还提供了一些其他的方法比如 getFD() 方法可以获取文件描述符close() 方法可以关闭输出流flush()方法可以将缓冲区的数据写入磁盘等。这些方法的实现比较简单就不一一列举了。
6.4 源码截图 如下是FileOutputStream类在io包中的目录位置及部分源码展示 总的来说FileOutputStream 的源码比较简单主要是在写入数据时需要进行一些缓冲区的操作和异常的处理。如果你需要写入文件那么使用 FileOutputStream 是一个不错的选择。
全文小结 本文介绍了Java IO包中的一些基本知识和FileOutputStream类的使用方法。在具体的介绍中我们详细讲解了如何使用FileOutputStream来写入文件并给出了相应的示例代码。最后我们也介绍了一些FileOutputStream类的常用方法。通过本文的学习我们可以更加轻松地操作文件流。
总结 Java IO包中的FileOutputStream类为开发人员提供了一种非常便捷的写入文件的方式。通过本文对FileOutputStream类的介绍我们可以更加灵活地使用Java编程语言进行文件的操作。因此在日常的Java开发中我们应该熟练掌握FileOutputStream类的使用方法。 … 好啦这期的内容就基本接近尾声啦若你想学习更多可以参考这篇专栏总结《「滚雪球学Java」教程导航帖》本专栏致力打造最硬核 Java 零基础系列学习内容打造全网精品硬核专栏带你直线超车欢迎大家订阅持续学习。
附录源码 如上涉及所有源码均已上传同步在「Gitee」提供给同学们一对一参考学习辅助你更迅速的掌握。
☀️建议/推荐你 无论你是计算机专业的学生还是对编程有兴趣的小伙伴都建议直接毫无顾忌的学习此专栏「滚雪球学Java」bug菌郑重承诺凡是学习此专栏的同学均能获取到所需的知识和技能全网最快速入门Java编程就像滚雪球一样越滚越大指数级提升。 最后如果这篇文章对你有所帮助帮忙给作者来个一键三连关注、点赞、收藏您的支持就是我坚持写作最大的动力。 同时欢迎大家关注公众号:「猿圈奇妙屋」 以便学习更多同类型的技术文章免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。 关于我 我是bug菌CSDN | 掘金 | infoQ | 51CTO 等社区博客专家历届博客之星Top30掘金年度人气作者Top4051CTO年度博主Top12华为云 | 阿里云| 腾讯云等社区优质创作者全网粉丝合计15w 硬核微信公众号「猿圈奇妙屋」欢迎你的加入免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。