Java新手必看:快速上手FileOutPutStream类

news2024/10/6 5:59:57

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  在Java开发中,文件操作是必不可少的一项功能。对于文件的读写操作,Java中提供了众多的类和方法,其中FileOutputStream类用于写入文件数据。

摘要

  FileOutputStream类是Java I/O类层次结构中输出流的类,它用于将数据写入到文件中。它继承了OutputStream类,拥有OutputStream类的所有方法。

FileOutputStream类

简介

  FileOutputStream类是Java I/O类层次结构中输出流的类,它用于将数据写入到文件中。它继承了OutputStream类,拥有OutputStream类的所有方法。FileOutputStream类提供了多种方法来写入数据,例如写入字节、字节数组、字符串等。同时还可以设置写入的起始位置,也可以追加写入。

源代码解析

public class FileOutputStream extends OutputStream {
    // ...
    // 将指定字节写入此文件输出流。
    public void write(int b) throws IOException {}
    // 将 b.length 个字节从指定的 byte 数组写入此文件输出流中。
    public void write(byte[] b) throws IOException {}
    // 将指定 byte 数组中从偏移量 offset 开始的 len 个字节写入此文件输出流。
    public void write(byte[] b, int off, int len) throws IOException {}
    // 将此文件输出流的内容写入到另一个输出流中。
    public void writeTo(OutputStream out) throws IOException {}
    // 刷新此输出流并强制写出所有缓冲的输出字节。
    public void flush() throws IOException {}
    // 关闭此文件输出流并释放与此流相关联的所有系统资源。
    public void close() throws IOException {}
    // ...
}

  FileOutputStream 是 Java IO 中用于向文件写入数据的类,它继承自 OutputStream 抽象类。以下是它的几个主要方法:

  1. write(int b):将指定字节写入此文件输出流。
  2. write(byte[] b):将 b.length 个字节从指定的 byte 数组写入此文件输出流中。
  3. write(byte[] b, int off, int len):将指定 byte 数组中从偏移量 offset 开始的 len 个字节写入此文件输出流。
  4. writeTo(OutputStream out):将此文件输出流的内容写入到另一个输出流中。
  5. flush():刷新此输出流并强制写出所有缓冲的输出字节。
  6. close():关闭此文件输出流并释放与此流相关联的所有系统资源。

  这些方法可以用于将数据写入文件并刷新缓冲区,也可以将数据写入其他输出流。同时,在使用完毕后要记得关闭输出流并释放系统资源。

部分源码截图如下:

在这里插入图片描述

应用场景案例

1. 文件写入操作

如下是案例模拟代码,同学们可以参考一下:

package com.example.javase.io.fileProject;

import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author 喵手
 * @version 1.0
 * @date 2023/10/20 16:30
 */
public class FileOutPutStreamTest {

    public static void test_1() throws IOException {
        String data = "Hello, world!!";
        // 以追加的方式创建FileOutputStream对象
        FileOutputStream fos = new FileOutputStream("testDoc.txt", true);
        // 将数据转为字节数组
        byte[] b = data.getBytes();
        // 写入数据到文件中
        fos.write(b);
        // 关闭文件输出流
        fos.close();
    }

    public static void main(String[] args) throws IOException {
        test_1();
    }
}

根据如上案例代码测试结果如下:

在这里插入图片描述

2. 文件复制

如下是案例模拟代码,同学们可以参考一下:

    //文件内容拷贝
    public static void test_2(File source, File dest) throws IOException {
        try (FileInputStream fis = new FileInputStream(source);
             FileOutputStream fos = new FileOutputStream(dest)) {
            byte[] buffer = new byte[1024];
            int length;
            while ((length = fis.read(buffer)) > 0) {
                fos.write(buffer, 0, length);
            }
        }
    }

    public static void main(String[] args) throws IOException {
        test_2(new File("test.txt"), new File("testDoc.txt"));
    }

根据如上案例代码测试结果如下:

在这里插入图片描述
然后可以看到执行完后,成功把test.txt的内存拷贝到了testDoc.txt。

在这里插入图片描述

优缺点分析

优点:

  1. 可以进行文件输出;
  2. 输出的数据完整性高,不容易出错;
  3. 支持多种写入方式,如写入字节、字节数组、字符串等;
  4. 可以设置写入的位置;
  5. 支持追加写入。

缺点:

  1. 不能进行文件输入;
  2. 对于大文件的写入,可能会出现内存溢出问题。

类代码方法介绍

  1. write(int b):将指定字节写入此文件输出流。
  2. write(byte[] b):将 b.length 个字节从指定的 byte 数组写入此文件输出流中。
  3. write(byte[] b, int off, int len):将指定 byte 数组中从偏移量 offset 开始的 len 个字节写入此文件输出流。
  4. writeTo(OutputStream out):将此文件输出流的内容写入到另一个输出流中。
  5. flush():刷新此输出流并强制写出所有缓冲的输出字节。
  6. close():关闭此文件输出流并释放与此流相关联的所有系统资源。

测试用例

测试代码演示

代码如下:仅供参考

import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamExample {
    public static void main(String[] args) {
        try {
            // 创建文件输出流对象
            FileOutputStream outputStream = new FileOutputStream("output.txt");
            String data = "Hello, FileOutputStream!";
            // 将数据写入到文件
            outputStream.write(data.getBytes());
            // 关闭流
            outputStream.close();
            System.out.println("数据写入文件成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

测试结果

根据如上测试用例执行结果如下:

在这里插入图片描述

测试代码分析

  该代码定义了两个方法,其中test_3()方法实现了将字符串数据写入文件的功能。具体实现过程如下:

  1. 创建文件输出流对象
FileOutputStream outputStream = new FileOutputStream("testDoc.txt");

  该代码定义了一个名为outputStream的文件输出流对象,该对象将数据输出到testDoc.txt文件中。

  1. 写入数据
String data = "Hello, FileOutputStream!";
outputStream.write(data.getBytes());

  将字符串“Hello, FileOutputStream!”转换成字节数组,并通过outputStream对象将其写入到文件中。

  1. 关闭流
outputStream.close();

使用完流对象后,需要调用close()方法关闭流以释放资源。

  在main()方法中,调用了test_3()方法来执行写入文件的操作。如果运行成功,控制台将输出“数据写入文件成功!”的提示信息。

全文小结

  本文主要介绍了Java I/O类层次结构中输出流的类–FileOutputStream。通过源代码解析,我们可以看到FileOutputStream类的具体实现和方法。同时,我们也展示了FileOutputStream类的应用场景,如文件写入、文件复制等。通过优缺点分析,我们了解到FileOutputStream类的优劣势,同时我们也提供了该类的类代码方法介绍。最后,我们通过测试用例验证了FileOutputStream类的正确性。

总结

  FileOutputStream类是Java中文件操作的重要类之一,它为我们提供了读写文件数据的便利性。同时,我们也需要注意该类的优劣势,根据实际场景选择合适的文件操作方式。

… …

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

… …

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

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

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

相关文章

怎么给word文件名批量替换部分文字?word设置批量替换文字教程

批量替换Word文件名中的几个字,对于经常处理大量文件的人来说,是一项非常实用的技能。以下是一个详细的步骤指南,帮助你快速完成这项任务。 首先,你需要准备一个可以批量重命名文件的工具。市面上有很多这样的工具可供选择&#x…

虚拟化界的强强联手:VirtIO与GPU虚拟化的完美结合

近距离了解 VirtIO 和 GPU 虚拟化 这是一篇 Linaro 开发团队项目组的科普文章。我们在处理器虚拟化项目中,经常会遇到 VirtIO 相关的问题;比如运行 Andriod 系统的时候需要运行 VirtIO 组件。‍‍‍随着 Cassini 项目和 SOAFEE(嵌入式边缘可扩…

电源管理芯片该如何测试?

电源管理芯片作为电子产品的重要组成部分,其性能测试必不可少。通过各项指标测试,评估电源管理芯片是否符合设计规范,及其稳定性和可靠性。 可通过检测以下指标参数来评估电源芯片的性能: 输入/出电压范围、输出纹波、电压调整率、…

Java openrasp记录-02

主要分析以下四个部分: 1.openrasp agent 这里主要进行插桩的定义,其pom.xml中定义了能够当类重新load时重定义以及重新转换 这里定义了两种插桩方式对应之前安装时的独立web的jar的attach或者修改启动脚本添加rasp的jar的方式 其中init操作则需要将ras…

贪吃蛇项目(小白保姆级教程)

游戏介绍 游戏背景: 贪吃蛇游戏是经典的游戏项目之一,也是很简单的小游戏 实现背景: 这里我们是基于32位的Win32_API进行实现的 需要的知识点: C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32_API等 适合人群&a…

【学习AI-相关路程-工具使用-自我学习-cudavisco-开发工具尝试-基础样例 (2)】

【学习AI-相关路程-工具使用-自我学习-cuda&visco-开发工具尝试-基础样例 (2)】 1、前言2、环境说明3、总结说明4、工具安装0、验证cuda1、软件下载2、插件安装 5、软件设置与编程练习1、创建目录2、编译软件进入目录&创建两个文件3、编写配置文…

OpenNJet评测,探寻云原生之美

在信息时代的大海上,云原生应用引擎如一艘航行于波涛之间的帆船,承载着创新的梦想和数字化的未来。本文将带领您登上这艘船,聚焦其中之一的OpenNJet,一同探寻其中的奥秘和精妙,领略其独特之美。 OpenNJet 内容浅析 O…

【0day】湖南建研工程质量检测系统InstrumentUsageRecordExport接口处存在任意文件读取漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

Flink窗口理论到实践 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小叮当~ 💖 超级爱分享,分享各种有趣干货! 👩‍💻 提供:模拟面试 | 简历诊断 | 独家简历模板 🌈 感谢关注,关注了你就是我的超级粉丝啦! &a…

P1873 [COCI 2011/2012 #5] EKO / 砍树

原题链接:[COCI 2011/2012 #5] EKO / 砍树 - 洛谷 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二分答案。 根据题目中的“帮助 Mirko 找到伐木机锯片的最大的整数高度 H,使得他能得到的木材至少为 M 米。换句话说&#xf…

【redis】redis持久化分析

目录 持久化Redis持久化redis持久化的方式持久化策略的设置1. RDB(快照)fork(多进程)RDB配置触发RDB备份自动备份手动执行命令备份(save | bgsave)flushall命令主从同步触发动态停止RDB RDB 文件恢复验证 RDB 文件是否被加载 RDB …

【毕业设计】基于SSM的运动用品商城的设计与实现

1.项目介绍 在这个日益数字化和信息化的时代,随着人们购物习惯的转变,传统的实体商店已经无法满足人们日益增长的在线购物需求。因此,基于SSM(Spring Spring MVC MyBatis)框架的运动用品商城项目应运而生&#xff0…

基于YOLOv8+PyQt5复杂场景下船舶目标检测系统

1. 应用场景 复杂场景下船舶目标检测系统的应用场景包括: 港口管理和安全:监控港口区域,确保船舶安全地进出港口,预防相撞事故的发生。 海洋交通监控:实时追踪海上交通流,并识别违规或异常航行行为&#x…

基于Java.Web框架React、Vue.js技术开发的一套(C#医院体检系统成品源码、支持二开)

医院体检系统是一种专为体检中心/医院体检科等体检机构开发的全流程管理系统。该系统通过软件实现检测仪器数据的自动提取,内置多级医生工作台,细化工作并将体检检查结果汇总,生成体检报告登记到计算机系统中。此外,该系统还能进行…

对XYctf的一些总结

对XYctf的一些总结 WEB 1.http请求头字段 此次比赛中出现的: X-Forwarded-For/Client-ip:修改来源ip via:修改代理服务器 还有一些常见的字段: GET:此方法用于请求指定的资源。GET请求应该安全且幂等&#xff0c…

C++学习笔记——仿函数

文章目录 仿函数——思维导图仿函数是什么仿函数的优势理解仿函数仿函数的原理举例 仿函数——思维导图 仿函数是什么 使用对象名调用operator()函数看起来像是在使用函数一样,因此便有了仿函数的称呼;仿函数存在的意义是&#x…

揭秘!如何利用自动化工具提升抖音推广效果

亲爱的读者朋友们,你是否在为抖音的推广效果而苦恼?看着别人家的视频轻松获得大量曝光,你是否也心生羡慕?今天,我们就来分享一个秘密武器,让你轻松提升抖音推广效果! 首先,让我们来了…

Maria DB 安装(含客户端),看这一篇就够了

文章目录 一 安装前准备1 版本与Win平台对应2 推荐安装 二 安装步骤1 安装主体程序2 添加系统路径Path 三 客户端 一 安装前准备 1 版本与Win平台对应 版本对应关系可参考: https://www.codebye.com/mariadb-deprecated-package-platforms.html。 2 推荐安装 经…

Ansible 自动化运维工具 - 了解和模块应用

目录 一. Ansible 的相关知识 1.1 Ansible 工具的简介 1.2 Ansible的四大组件 1.3 运维自动化工具 1.4 Ansible 和其它自动化运维工具对比 1.5 Ansible 的优缺点 二. Ansible 环境安装部署 2.1 管理端安装 ansible 2.2 配置主机清单 三. ansible 命令行模块 3.1 comm…

SpringBoot+Vue+Element-UI实现协同过滤算法商品推荐系统

前言介绍 本次设计任务是要设计一个基于协同过滤算法的商品推荐系统,通过这个系统能够满足商品推荐系统的管理功能。系统的主要包括首页,个人中心,用户管理,商品类型管理,商品信息管理,系统管理&#xff0…