【IO流】FileOutputStream 字节输出流

FileOutputStream 字节输出流

    • 1. 概述
    • 2. 作用
    • 3. 书写步骤
    • 4. 构造方法
    • 5. 换行写
    • 6. 续写
    • 7. 注意事项

1. 概述

FileOutputStream 是 Java 中用于向文件写入字节数据的输出流类。它用于创建一个文件输出流,该流用于将数据写入文件。

  1. 功能FileOutputStream 可以用来写入字节数据到文件中。它支持将字节、字节数组或部分字节数组写入到文件中。

  2. 创建流:要使用 FileOutputStream,需要指定要写入的文件路径。可以使用 new FileOutputStream(new File("文件路径")) 创建一个文件输出流对象。

  3. 写入数据:通过调用 write(byte[] b)write(int b)write(byte[] b, int off, int len) 等方法,可以将字节数据写入文件。

  4. 关闭流:写入完成后,需要调用 close() 方法关闭流,释放资源。

  5. 异常处理:在使用 FileOutputStream 时,需要注意处理可能抛出的 IOException 异常,以确保文件操作的可靠性。

2. 作用

FileOutputStream 的主要作用是将字节数据写入文件。

  1. 文件写入:使用 FileOutputStream 可以将字节数据写入文件。可以写入字节、字节数组或部分字节数组,实现对文件内容的修改或追加。

  2. 创建文件:如果指定的文件不存在,FileOutputStream 会自动创建该文件,并将数据写入其中。如果文件已存在,则会先清空文件内容,再写入新的数据。

  3. 文件追加:除了覆盖文件内容外,FileOutputStream 还可以在已有文件的末尾追加新的字节数据,而不会删除原有内容。这对于日志文件、数据文件等需要不断增加内容的场景非常有用。

  4. 二进制文件处理FileOutputStream 可以处理二进制文件,如图像、音频、视频文件等。通过向文件写入原始的字节数据,能够保持文件的二进制结构不变。

  5. 文件流关闭:在写入完成后,调用 close() 方法关闭 FileOutputStream 流,确保文件操作的正确性和资源的释放。

3. 书写步骤

  • 实现步骤:

    1. 创建对象

    2. 写出数据

    3. 释放资源

  • FileOutputStream书写细节

    • ① 创建字节输出流对象
      • 细节1:参数是字符串表示的路径或者File对象都是可以的

      • 细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的

      • 细节3:如果文件已经存在,则会清空文件

    • ② 写数据
      • 细节: write方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符
    • ③ 释放资源
      • 细节:每次使用完流之后都要释放资源(解除了资源的占用)
  • 代码示例
    实现需求:写出一段文字到本地文件。(暂时不写中文)

    package text.IOStream.FileOutputStream.FileOutputStream01;import java.io.FileOutputStream;
    import java.io.IOException;/*
    字节输出流:FileOutputStream
    实现需求:写出一段文字到本地文件。(暂时不写中文)实现步骤:1.创建对象2.写出数据3.释放资源FileOutputStream书写细节
    ① 创建字节输出流对象细节1:参数是字符串表示的路径或者File对象都是可以的细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的细节3:如果文件已经存在,则会清空文件
    ②写数据细节: write方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符
    ③ 释放资源细节:每次使用完流之后都要释放资源(解除了资源的占用)*/
    public class FileOutputStream01 {public static void main(String[] args) throws IOException {//1.创建对象//写出 输出流 OutputStream//本地文件 FileFileOutputStream fos = new FileOutputStream("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileOutputStream\\FileOutputStream01\\a.txt");// 2.写出数据fos.write(99);//3.释放资源fos.close();}
    }
  • 输出结果
    在这里插入图片描述

4. 构造方法

FileOutputStream写数据的三种方式:

方法名称说明
void write(int b)一次写一个字节数据
void write(byte[] b)一次写一个字节数组数据
void write(byte[] b, int off, int len)一次写一个字节数组的部分数据
  • 细节:
    1. void write(byte[lb,int off,int len):一次写一个字节数组的部分数据
    • 参数一: 数组

    • 参数二:起始索引

    • 参数三:个数

  • 代码示例
    package text.IOStream.FileOutputStream.FileOutputStream02;import java.io.FileOutputStream;
    import java.io.IOException;/*FileOutputStream写数据的三种方式:| 方法名称                            | 说明                         |
    | ----------------------------------- | ---------------------------- |
    | void write(int b)                   | 一次写一个字节数据           |
    | void write(byte[]b)                 | 一次写一个字节数组数据       |
    | void write(byte[lb,int off,int len) | 一次写一个字节数组的部分数据 |细节:1.void write(byte[lb,int off,int len):一次写一个字节数组的部分数据参数一:数组参数二:起始索引参数三:个数*/
    public class FileOutputStream02 {public static void main(String[] args) throws IOException {//1.void write(int b) :一次写一个字节数据System.out.println("=============1.void write(int b) :一次写一个字节数据=============");//创建对象FileOutputStream fos1 = new FileOutputStream("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileOutputStream\\FileOutputStream02\\a.txt");//写出数据fos1.write(97);//释放资源fos1.close();System.out.println();//2.void write(byte[]b):一次写一个字节数组数据System.out.println("=============2.void write(byte[]b):一次写一个字节数组数据=============");//创建对象FileOutputStream fos2 = new FileOutputStream("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileOutputStream\\FileOutputStream02\\b.txt");//写出数据byte[] bytes1 = {97, 98, 99, 100, 101, 102};fos2.write(bytes1);//释放资源fos2.close();System.out.println();//3.void write(byte[lb,int off,int len):一次写一个字节数组的部分数据System.out.println("=============3.void write(byte[lb,int off,int len):一次写一个字节数组的部分数据=============");//创建对象FileOutputStream fos3 = new FileOutputStream("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileOutputStream\\FileOutputStream02\\c.txt");//写出数据byte[] bytes2 = {97, 98, 99, 100, 101, 102};fos3.write(bytes2, 0, 3);//释放资源fos3.close();}
    }
  • 输出结果
    • 1.void write(int b) :一次写一个字节数据
      在这里插入图片描述
      在这里插入图片描述

    • 2.void write(byte[]b):一次写一个字节数组数据
      在这里插入图片描述
      在这里插入图片描述

    • 3.void write(byte[lb,int off,int len):一次写一个字节数组的部分数据
      在这里插入图片描述
      在这里插入图片描述

5. 换行写

换行写:再次写出一个换行符就可以了

windows: \r\n
Linux: \n
Mac: \r

  • 细节:

    • 在windows操作系统当中,java对回车换行进行了优化。
    • 虽然完整的是\r\n,但是我们写其中一个\r或者\n,java也可以实现换行,因为java在底层会补全。
  • 建议:不要省略,还是写全了。

  • 代码示例
    在a.txt文件中写道:

      love (换行)you
    
    package text.IOStream.FileOutputStream.FileOutputStream03;import java.io.FileOutputStream;
    import java.io.IOException;/*换行写换行写:再次写出一个换行符就可以了windows:\r\nLinux:\nMac: \r细节:在windows操作系统当中,java对回车换行进行了优化。虽然完整的是\r\n,但是我们写其中一个\r或者\n,java也可以实现换行,因为java在底层会补全。
    建议:不要省略,还是写全了。练习:在a.txt文件中写道:love (换行)you*/
    public class FileOutputStream03 {public static void main(String[] args) throws IOException {//创建对象FileOutputStream fos = new FileOutputStream("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileOutputStream\\FileOutputStream03\\a.txt");//写出数据String str1 = "love";//将字符串转换成字节数组byte[] bytes1 = str1.getBytes();fos.write(bytes1);String str2 = "\r\n";byte[] bytes2 = str2.getBytes();fos.write(bytes2);String str3 = "you";byte[] bytes3 = str3.getBytes();fos.write(bytes3);//释放资源fos.close();}
    }
  • 输出结果
    在这里插入图片描述

6. 续写

续写:如果想要续写,打开续写开关即可

  • 开关位置:创建对象的第二个参数append

    public FileOutputStream(String name, boolean append)

    • 默认false:表示关闭续写,此时创建对象会清空文件
    • 手动传递true;表示打开续写,此时创建对象不会清空文件
  • 代码示例

    package text.IOStream.FileOutputStream.FileOutputStream04;import java.io.FileOutputStream;
    import java.io.IOException;/*续写
    续写:
    如果想要续写,打开续写开关即可开关位置:创建对象的第二个参数appendpublic FileOutputStream(String name, boolean append)默认false:表示关闭续写,此时创建对象会清空文件手动传递true;表示打开续写,此时创建对象不会清空文件*/
    public class FileOutputStream04 {public static void main(String[] args) throws IOException {//创建对象FileOutputStream fos = new FileOutputStream("D:\\JavaCode\\code\\codeText01\\src\\text\\IOStream\\FileOutputStream\\FileOutputStream03\\a.txt", true);//写出数据String str = "XX";//将字符串转换成字节数组byte[] bytes = str.getBytes();fos.write(bytes);//释放资源fos.close();}
    }
  • 输出结果
    在这里插入图片描述

7. 注意事项

  1. 数据丢失:使用 FileOutputStream 写入数据时,如果数据未被刷新到磁盘或未调用 close 方法关闭流,有可能造成数据丢失。因此,在写入完数据后,务必调用 flush 方法将数据刷新到磁盘并调用 close 方法关闭流。

  2. 异常处理:在使用 FileOutputStream 进行文件写入操作时,可能会抛出 IOException 异常,因此需要在适当的地方进行异常处理,以避免程序崩溃或数据丢失。

  3. 文件权限:在写入文件时,需要注意文件的权限问题。确保当前用户有足够的权限来进行文件写入操作,否则会导致写入失败。

  4. 文件覆盖:使用 FileOutputStream 写入文件时,默认会覆盖原有文件内容。如果不希望覆盖文件内容,可以通过构造函数中的参数来指定是否追加数据而不是覆盖。

  5. 数据编码FileOutputStream 写入的是字节数据,如果需要写入字符数据或其他类型的数据,需要进行适当的编码转换,以确保数据的正确性。

  6. 资源释放:在完成文件写入操作后,一定要及时关闭 FileOutputStream 流,释放资源,避免资源泄露和程序性能问题。

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

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

相关文章

C高级D5作业

1.#!/bin/bash read -p "请输入一个字符>>" -n 1 c echo case $c in [[:lower:]]) echo "小写" ;; [[:upper:]]) echo "大写" ;; [1-9]) echo "数字" ;; …

阿里云香港网络线路类型BGP(多线)精品延迟测试

阿里云香港等地域服务器的网络线路类型可以选择BGP(多线)和 BGP(多线)精品,普通的BGP多线和精品有什么区别?BGP(多线)适用于香港本地、香港和海外之间的互联网访问。使用BGP&#xf…

ChatGPT用于润色中文学术论文

方案一: 以下是一段用于润色中文学术论文的指令, 该指令可以生成一个表格, 第一列是润色前, 第二列是润色后, 第三列是解释做了什么修改。指令如下: As a Chinese academic paper writing improvement assistant, your task is to improve the spelling…

C++ //练习 7.27 给你自己的Screen类添加move、set和display函数,通过执行下面的代码检验你的类是否正确。

C Primer&#xff08;第5版&#xff09; 练习 7.27 练习 7.27 给你自己的Screen类添加move、set和display函数&#xff0c;通过执行下面的代码检验你的类是否正确。 Screen myScreen(5, 5, X); myScreen.move(4, 0).set(#).display(cout); cout<<"\n"; myScr…

力扣刷题-290.单词规律

给定一种规律 pattern 和一个字符串 s &#xff0c;判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配&#xff0c;例如&#xff0c; pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 示例1: 输入: pattern "abba", s "…

循环、数组、match

for循环 循环&#xff1a;周而复始 For&#xff08;临时变量&#xff1b;循环条件&#xff1b;腰间变更&#xff09;{ 循环体 } For循环可以嵌套 while循环 声明变量 While&#xff08;条件&#xff09;{ 循环体 变量的变化} do while循环 do{ 执行语句&#xff1b; …

LeetCode Python - 23.合并K个升序链表

目录 题目答案运行结果 题目 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&#xff1a;[1,1,2,3,4,4,5,6] 解释&a…

Open CASCADE学习|直纹曲面(ruled surface)

直纹曲面是一类特殊的曲面&#xff0c;在几何学和微分几何中都有研究。它的主要特性是&#xff0c;曲面上的每一点都有至少一条直线经过。换句话说&#xff0c;直纹曲面可以由一条直线通过连续运动构成。在三维欧几里德空间中&#xff0c;最常见的直纹曲面是平面、柱面和锥面&a…

MySQL数据库进阶第一篇(存储引擎与Linux系统上安装MySQL数据库)

文章目录 一、MySQL体系结构二、存储引擎介绍相关操作&#xff1a; 三、InnoDB 存储引擎简介四、MyISAM 存储引擎简介五、Memory 存储引擎简介六、存储引擎特点七、存储引擎的选择八、Linux系统上安装MySQL数据库1.用FinalShell远程连接Linux系统2.下载Linux版的MySQL安装包3.上…

代码随想录day23--回溯的应用2

LeetCode39.组合总和 题目描述&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates…

PyQt Python 使用 VTK ITK 进行分割 三维重建 医学图像可视化系统 流程

效果&#xff1a; 重建流程&#xff1a; 1. 输入 可以读取DICOM &#xff0c;nii nrrd 等数据 设置读取器以加载 DICOM 图像系列。 使用 itk::GDCMImageIO 作为 DICOM 图像的输入输出接口。 使用 itk::GDCMSeriesFileNames 获取指定路径下的所有 DICOM 文件名。 使…

Code Composer Studio (CCS) - Current and Local Revision

Code Composer Studio [CCS] - Current and Local Revision References 鼠标放在文件内的任意位置&#xff0c;鼠标右键 -> Compare With -> Local History -> Revision Time. References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

Doris ——SQL原理解析

目录 前言 一、Doris简介 二、SQL解析简介 2.1 词法分析 2.2 语法分析 2.3 逻辑计划 2.4 物理计划 三、Doris SQL解析的总体架构 四、Parse阶段 五、Analyze阶段 六、SinglePlan阶段&#xff08;生成单机逻辑Plan阶段&#xff09; 七、DistributedPlan计划&#xf…

SQL-Labs靶场“11-15”关通关教程

君衍. 一、十一关 基于POST单引号字符型注入1、源码分析2、联合查询注入3、报错注入 二、十二关 基于POST双引号字符型注入1、源码分析2、联合查询注入3、报错注入 三、十三关 基于POST单引号报错注入变形1、源码分析2、报错注入 四、十四关 基于POST双引号报错注入1、源码分析…

代码随想录day24--回溯的应用3

LeetCode93.修复IP地址 题目描述&#xff1a; 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 "192.168.1.1" 是…

Chapter 8 - 15. Congestion Management in TCP Storage Networks

User Actions After learning the states of queue utilization, the following are the actions that admins and operators can take while using TCP transport for storage traffic. 了解了队列利用率的状态后,管理员和操作员在使用 TCP 传输存储流量时可以采取以下措施。…

使用八叉树模拟水和烟雾 Simulating Water and Smoke with an Octree Data Structure 论文阅读笔记

原文&#xff1a; Losasso, Frank, Frdric Gibou, and Ron Fedkiw. “Simulating water and smoke with an octree data structure.” Acm siggraph 2004 papers. 2004. 457-462. 引言 这篇文章扩展了 [Popinet 2003] 的工作&#xff0c;拓展到表面自由流&#xff0c;并且使…

Oracle 基础入门指南

一、什么是Oracle&#xff1f; Oracle是一款由美国Oracle公司开发的关系型数据库管理系统。它支持SQL查询语言&#xff0c;并提供了丰富的功能和工具&#xff0c;用于管理大规模数据存储、处理和访问。Oracle被广泛应用于企业级应用中&#xff0c;包括金融、电信、零售等各行各…

第12章 反射

12.1 反射概述 Java的反射&#xff08;reflection&#xff09;机制是指在程序的运行状态中&#xff0c;可以构造任意一个类的对象&#xff0c;可以得到任意一个对象所属的类的信息&#xff0c;可以调用任意一个类的成员变量和方法&#xff0c;可以获取任意一个对象的属性和方法…

突破编程_C++_高级教程(多线程编程实例)

1 生产者-消费者模型 生产者-消费者模型是一种多线程协作的设计模式&#xff0c;它主要用于处理生产数据和消费数据的过程。在这个模型中&#xff0c;存在两类线程&#xff1a;生产者线程和消费者线程。生产者线程负责生产数据&#xff0c;并将其放入一个共享的数据缓冲区&…