【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…

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…

循环、数组、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" 是…

使用八叉树模拟水和烟雾 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;可以获取任意一个对象的属性和方法…

js---webAPI

01 声明变量 js组成&#xff1a; DOM:操作网页内容的,开发页面内容特效和实现用户交互 BOM: DOM树&#xff1a;将 HTML 文档以树状结构直观的表现出来&#xff0c;我们称之为文档树或 DOM 树 文档树直观的体现了标签与标签之间的关系 CSS获取元素的方法 document.querySele…

精品springboot基于大数据的电脑主机硬件选购助手-可视化大屏

《[含文档PPT源码等]精品基于springboot基于大数据的电脑主机硬件选购助手[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; Java——涉及技术&#xff1a; 前端使用技术&a…

Cron表达式选择器

Cron表达式选择器 功能描述 Cron表达式选择器是用于定时任务调度的一种常见工具&#xff0c;通常用于指定任务的执行时间。Cron表达式由一系列时间单位和对应的时间值组成&#xff0c;用于指定任务的执行时间。下面是一个Cron表达式的示例 0 0 12 * * ?这个表达式的含义是每…

电阻器的脉冲浪涌能力?

由于现有需求&#xff0c;许多现代电子电路和设备都会经历瞬态脉冲和浪涌。这反过来又导致需要“设计”瞬态浪涌保护&#xff0c;尤其是在电机控制器等电路中。当电机启动时&#xff0c;此时消耗的电流过大&#xff0c;可能导致电阻器故障。同样&#xff0c;如果电容器用于电机…