(每日持续更新)jdk api之FileOutputStream基础、应用、实战

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。

以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】

一、java.io

1.22 FileOutputStream

FileOutputStream 介绍:

FileOutputStream 是 Java I/O 中用于写入文件的类,它继承自 OutputStream 类。通过 FileOutputStream,可以向文件中写入字节数据。

FileOutputStream 所有字段:

FileOutputStream 类没有公共字段。

FileOutputStream 构造方法:
  • FileOutputStream(File file) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流。

  • FileOutputStream(File file, boolean append) 创建一个向指定 File 对象表示的文件中写入数据的文件输出流,如果 appendtrue,则将数据追加到文件末尾,否则将覆盖文件内容。

  • FileOutputStream(String name) 创建一个向具有指定名称的文件中写入数据的输出文件流。

  • FileOutputStream(String name, boolean append) 创建一个向具有指定名称的文件中写入数据的文件输出流,如果 appendtrue,则将数据追加到文件末尾,否则将覆盖文件内容。

FileOutputStream 方法摘要:

以下是一些常用的 FileOutputStream 方法:

  • void write(int b) 将指定的字节写入文件输出流。

  • void write(byte[] b) 将 b.length 个字节从指定的 byte 数组写入此文件输出流。

  • void write(byte[] b, int off, int len) 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入文件输出流。

  • void close() 关闭此文件输出流并释放与此流相关联的任何系统资源。

  • void flush() 刷新此文件输出流的缓冲区。

简单使用例子:

以下是一个简单的例子,演示如何使用 FileOutputStream 写入数据到文件:

javaCopy code
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
​
public class FileOutputStreamExample {
​public static void main(String[] args) {String filePath = "example.txt";
​try (FileOutputStream fos = new FileOutputStream(filePath)) {// 写入字符串数据String data = "Hello, FileOutputStream!";fos.write(data.getBytes());
​// 写入换行符fos.write(System.lineSeparator().getBytes());
​// 写入字节数组byte[] byteArray = {65, 66, 67, 68, 69}; // ASCII codes for A, B, C, D, Efos.write(byteArray);
​System.out.println("Data has been written to the file.");
​} catch (IOException e) {e.printStackTrace();}}
}

在这个例子中,我们创建了一个 FileOutputStream 对象,将字符串和字节数组写入指定的文件(example.txt)。请注意,这里使用了 try-with-resources 语句,确保在写入完成后关闭文件输出流。

应用场景

FileOutputStream 主要用于将数据写入文件。以下是一些常见的应用场景和相应的代码实现:

1. 基本文件写入:
  • 场景: 向文件中写入文本或二进制数据。

  • 代码实现:

    javaCopy code
    try (FileOutputStream fos = new FileOutputStream("output.txt")) {String data = "Hello, FileOutputStream!";fos.write(data.getBytes());
    } catch (IOException e) {e.printStackTrace();
    }
2. 文件追加内容:
  • 场景: 将新数据追加到现有文件的末尾。

  • 代码实现:

    javaCopy code
    try (FileOutputStream fos = new FileOutputStream("output.txt", true)) {String newData = "Appending new data!";fos.write(newData.getBytes());
    } catch (IOException e) {e.printStackTrace();
    }
3. 写入字节数组:
  • 场景: 将字节数组的内容写入文件。

  • 代码实现:

    javaCopy code
    try (FileOutputStream fos = new FileOutputStream("output.bin")) {byte[] byteArray = {65, 66, 67, 68, 69}; // ASCII codes for A, B, C, D, Efos.write(byteArray);
    } catch (IOException e) {e.printStackTrace();
    }
4. 写入部分字节数组:
  • 场景: 从字节数组的特定位置开始写入一部分数据。

  • 代码实现:

    javaCopy code
    try (FileOutputStream fos = new FileOutputStream("output.bin")) {byte[] byteArray = {65, 66, 67, 68, 69}; // ASCII codes for A, B, C, D, Efos.write(byteArray, 1, 3); // Writes B, C, D
    } catch (IOException e) {e.printStackTrace();
    }
5. 写入文件时异常处理:
  • 场景: 在写入文件时处理可能的异常。

  • 代码实现:

    javaCopy code
    try (FileOutputStream fos = new FileOutputStream("output.txt")) {String data = "Hello, FileOutputStream!";fos.write(data.getBytes());
    } catch (IOException e) {System.err.println("Error writing to the file: " + e.getMessage());
    }
6. 刷新缓冲区:
  • 场景: 在写入文件后手动刷新缓冲区。

  • 代码实现:

    javaCopy code
    try (FileOutputStream fos = new FileOutputStream("output.txt")) {String data = "Hello, FileOutputStream!";fos.write(data.getBytes());fos.flush(); // 刷新缓冲区
    } catch (IOException e) {e.printStackTrace();
    }
7. 自定义缓冲区大小:
  • 场景: 设置自定义的缓冲区大小以提高写入性能。

  • 代码实现:

    javaCopy code
    try (FileOutputStream fos = new FileOutputStream("output.txt")) {String data = "Hello, FileOutputStream!";byte[] buffer = data.getBytes();fos.write(buffer, 0, buffer.length);
    } catch (IOException e) {e.printStackTrace();
    }

这些示例覆盖了一系列使用 FileOutputStream 的常见应用场景。实际使用时,根据具体需求进行适当的调整和组合。

实战例子

让我们考虑一个简单的项目实战例子,假设你正在开发一个日志记录系统,需要将日志信息写入文件。以下是一个使用 FileOutputStream 的基本项目实战例子:

javaCopy code
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
​
public class SimpleLogger {
​private static final String LOG_FILE = "application.log";
​public static void main(String[] args) {// 模拟日志记录log("Application started.");
​// 模拟应用程序运行中的一些操作performSomeOperations();
​// 模拟日志记录log("Application stopped.");}
​private static void performSomeOperations() {// 模拟应用程序运行中的一些操作log("Performing some operations...");
​// 模拟错误发生logError("Error occurred during operation.");
​// 模拟更多操作...
​log("Operations completed.");}
​private static void log(String message) {try (FileOutputStream fos = new FileOutputStream(LOG_FILE, true)) {// 获取当前时间戳LocalDateTime timestamp = LocalDateTime.now();// 格式化时间戳String formattedTimestamp = timestamp.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));// 构造日志信息String logEntry = "[" + formattedTimestamp + "] " + message + System.lineSeparator();// 将日志信息写入文件fos.write(logEntry.getBytes());} catch (IOException e) {e.printStackTrace();}}
​private static void logError(String errorMessage) {// 记录错误信息log("[ERROR] " + errorMessage);}
}

在这个例子中,我们创建了一个简单的日志记录系统。每次调用 log 方法时,会将带有时间戳的日志信息追加到名为 application.log 的日志文件中。实际项目中,可以根据需求扩展这个简单的例子,添加更多日志级别、配置选项等。请注意,上述示例使用了 try-with-resources 语句,确保在写入完成后关闭文件输出流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/629156.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dp--1143. 最长公共子序列/medium 理解度B

1143. 最长公共子序列 1、题目2、题目分析3、解题步骤4、复杂度最优解代码示例5、抽象与扩展 1、题目 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字…

huggingface学习 | 云服务器使用git-lfs下载huggingface上的模型文件

文章目录 一、找到需要下载的huggingface文件二、准备工作(一)安装git-lfs(二) 配置git ssh 三、检查ssh连接huggingface是否成功 一、找到需要下载的huggingface文件 huggingface官网链接:https://huggingface.co/ 以…

Python和Java代码实现:切线法求解一维最优化问题

Python和Java代码实现:切线法求解一维最优化问题 代码实现Python代码Java代码 求解实例 根据概念查询,切线法定义如下: 切线法(Tangent Method)是一种用于求解非线性方程的数值方法。它也被称为牛顿法(Newt…

Backtrader 文档学习-Indicators 开发

Backtrader 文档学习-Indicators 开发 1. Indicators 开发需要 Indicators 开发需要: 从Indicator(直接或从已存在的子类)继承派生的类定义中包括Lines指标必须至少有Line。既可以从现有的Line派生,也可以用已定义的Line选择性地定义可以改变行为的参…

HarmonyOS之sqlite数据库的使用

从API Version 9开始,鸿蒙开发中sqlite使用新接口ohos.data.relationalStore 但是 relationalStore在 getRdbStore操作时,在预览模式运行或者远程模拟器运行都会报错,导致无法使用。查了一圈说只有在真机上可以正常使用,因此这里…

分布式搜索引擎ElasticSearch——基础

分布式搜索引擎ElasticSearch——基础 文章目录 分布式搜索引擎ElasticSearch——基础初识elasticsearch什么是elasticsearchelasticsearch的发展正向索引和倒排索引安装elasticsearch,kibana部署单点es创建网络加载镜像运行 部署kibana部署DevTools 安装IK分词器在…

java----多态

什么是多态 多态是指同一个类型的对象在不同情况下表现出不同的行为。具体来说,多态包括两种类型:静态多态和动态多态。 静态多态(编译时多态)是通过方法重载实现的,即在同一个类中有多个同名但参数列表不同的方法&…

人类的逻辑常常是演绎、归纳和溯因推理混合

人类的逻辑推理往往是一种综合运用不同推理方式的能力。 演绎推理是从已知的前提出发,推断出必然的结论。通过逻辑规则的应用,人们可以从一些已知的事实或前提出发,得出一个必然成立的结论。演绎推理是一种严密的推理方式,它能够保…

STM32F103标准外设库—— 新建工程与库函数(四)

个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…

Go新项目-配置文件的选取及区别和写法(1)

先说结论:我们选型TOML yaml,toml,json,ini 实际业务都有用 实际栗子是:我们想要把Go的切片作为配置文件,YAML写起来比较吃力,TOML就很容易了。 配置文件是用于配置计算机程序的参数、初始化设…

文件操作一(非常重要)

文件操作一(非常重要) 一、为什么使用文件?二、什么是文件?三、文件名(简单理解)四、二进制文件和文本文件(重要)五、流的概念(非常重要)六、文件的打开和关闭七、文件的顺序读写函数…

HarmonyOS应用开发者初级认证试题库(鸿蒙)

目录 考试链接: 流程: 选择: 判断: 单选: 多选: 考试链接: 开发者能力认证-职业认证-鸿蒙能力认证-华为开发者学堂 (huawei.com)https://developer.huawei.com/consumer/cn/training/dev-…

芯品荟 | 电脑机箱键盘副屏市场调研报告

一.产品简介 1.带TFT彩屏电脑机箱 2.带小TFT彩屏电脑键盘 为什么电脑机箱&键盘,要带屏? 带屏的电脑机箱&键盘客户群体? 电竞玩家、设计师、电子发烧友、股民...... 二、市场规模 中国电脑机箱年产量约6000万台,键盘年产量约3亿…

从零开始搭建ubuntu 16.04 pwndocker环境

1.安装VMware-tools 1.1遇到问题 在使用 VMware Workstation时遇到了VMware Tools不能安装的问题,具体表现为:在要安装VMware Tools的虚拟机上右键 ----》安装VMware Tools(T)… 为灰色,不能够点击。 1.2解决方案    1. 关闭虚拟机&…

DWM1000 中断与STM32外部中断

DWM1000 中断与STM32外部中断 概述 DWM1000 本身有很多中断控制,例如发送完成中断,接收完成中断等等, 可以通过IRQ(GPIO8) 送到外部控制器。 DWM1000 IRQ pin可以挂到STM32 的外部中断上。 例如当接收到数据帧后,DWM1000 拉IRQ&…

3.goLand基础语法

目录 概述语法for常量与变量数组切片 slice切片问题问题1问题2 Make 和 New结构体和指针结构体标签 结束 概述 从 java 转来学 go &#xff0c;在此记录&#xff0c;方便以后翻阅。 语法 for package mainimport "fmt"func main() {for i : 0; i < 3; i {fmt.…

深度学习记录--偏差/方差(bias/variance)

误差问题 拟合神经网络函数过程中会出现两种误差&#xff1a;偏差(bias)和方差(variance) 偏差和误差的区别 欠拟合(underfitting) 当偏差(bias)过大时&#xff0c;如左图&#xff0c;拟合图像存在部分不符合值&#xff0c;称为欠拟合(underfitting) 过拟合(overfitting) …

腾讯云服务器多少钱一个月?5元/月起多配置报价

腾讯云服务器多少钱一个月&#xff1f;5元一个月&#xff0c;年付62元&#xff0c;这么每个月5.1元&#xff0c;官方活动 https://curl.qcloud.com/oRMoSucP 关于腾讯云服务器一个月价格&#xff0c;腾讯云服务器网txyfwq.com分享大家移步到这个活动查看精准报价。 CPU/内存/公…

Linux look命令教程:在排序过的文件中搜索字符串(附案例详解和注意事项)

Linux look命令介绍 look命令(originally from the unix “look” command)用于在排序过的文件中搜索字符串。通常&#xff0c;look命令被用于查找包含给定字符串的行&#xff0c;这对于检查大型文件并查找特定主题或模式非常有用。 Linux look命令适用的Linux版本 以下是lo…

系统的可观察性是指什么?

系统的可观察性是指什么&#xff1f; 本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 系统的可观察性是系统设计的重要一环。不可观察的系统无法度量、无法监控、无法改进。 日志、追踪和度量是系统可观测性的三大支柱。 下图显示了…