JavaIO流与字节输出流OutputStream

news2024/11/16 23:55:46

1 概述

1.1 什么是IO流

IO流是存储和读取数据的解决方案,用于读写文件中的数据(包括本地文件、网络等)
IO流的参照是程序或内存,即使程序在读,程序在写。

1.2 IO的分类

根据流的方向分为:输入流输出流

  • 输入流:把数据从文件等中读取到内存的流
  • 输出流:把数据从内存写入到文件等中的流
    根据操作文件的类型分为:字节流字符流
  • 字节流:能操作所有的文件类型
  • 字符流:只能操作纯文本文件

1.3 IO流的体系

![[Pasted image 20240326214713.png]]

他们都有不同的实现类。

2 字节流

2.1 字节输出流(OutputStream)

是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。它定义了字节输出流的基本共性功能方法。
![[Pasted image 20240326230022.png]]

2.2 FileOutputStream

FileOutputStream是字节输出流的一个简单的实现类。
![[Pasted image 20240326230436.png]]

观察它的构造函数,传入的参数有两种,一种是一个参数字符串或者File对象,传递字符串的时候也会将其转化为File对象,另一个参数可选,false是默认值,表示清空当前文件,true则表示不清空当前文件,而是在当前文件的基础上作出变化。
![[Pasted image 20240327111926.png]]

![[Pasted image 20240327112032.png]]

2.3 写数据的流程

  1. 创建字节输出流对象
  2. 写数据
  3. 释放资源
    我们在改路径下创建一个test.txt文件,手动输入一些内容:
    ![[Pasted image 20240327153154.png]]

然后执行下面程序:

package ioStream;

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

public class StreamDemo1 {
    public static void main(String[] args) throws IOException {
        // 1. 创建对象
        FileOutputStream fos = new FileOutputStream("E:\\javacode\\Acwing\\test.txt");
        // 2. 写入数据
        fos.write('a');
        // 3. 关闭资源
        fos.close();
    }
}

控制台没有报错,并且查看test.txt:
![[Pasted image 20240327113121.png]]

2.4 需要注意的细节

  • 创建对象
    • 我们会发现test.txt文件中原先的内容被我们写入的字符给覆盖掉了,其实本质上说是在创建字节输出流对象时对文件先进行了清空。我们可以重写给test.txt文件写入内容,然后把写入数据的代码删掉,并执行程序,程序执行成功之后我们打开test.txt,文件会发现文件是空白的。
    • 如果我们需要在接着原文件写入数据,也即在原文件内容之后开始写输入而不是覆盖,那么我们创建对象时就需要额外传递一个参数true(默认值是false),然后写入数据就会发现是append。
  • 写入数据
    • 写入数据的write方法,它有不同的重载,例如:![[Pasted image 20240327154003.png]]
    • 值得注意的时,我们写入的是一个字符,假设我们我们需要写入9,那么传递的参数就应该是'9'或者9的ascii码57
    • 我们需要换行时。换行也是一个字符\r\n,因此我们在需要换行时写入改字符即可。
  • 关闭资源
    • 我们在完成操作之后,我们一定要关闭资源。否则假设我的程序对文件的写操作已经完成,但还在执行其他方法,此时我们对文件进行操作就会出现异常。就好像我们在平常尝试去删除一个已经打开的文件。

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

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

相关文章

九州金榜|面对校园霸凌,家长应该如何教育?

近期关于校园霸凌事件接连发生,前有邯郸时间,后有福建晋江一中学生因不忍被霸凌,选择跳楼轻生,面对此类事件,接连发生,孩子为什么会成为被霸凌的对象?家长应该如何教育孩子敢于对霸凌时说不。下…

2024年第八届制造、材料与冶金工程国际会议(ICMMME 2024)即将召开!

2024年第八届制造、材料与冶金工程国际会议(ICMMME 2024)将于2024年7月12-14日在日本横滨举行。本次会议的目的是促进与会者之间的互动,汇聚对相关研究领域感兴趣的研究人员,工程师和从业人员。以了解这些领域的最新发展。为分享理…

PCB绘制时增加多层及生成GND的一些总结

1. 如何增加多层板? 【说明】由于GND大面积铺铜,常采用负片输出。因此选择“PLANE”,并勾选“negative”。 值得注意的是, 1)通常是每层之间会加一层介质,即绿色部分那个。 2)GND层通常与主器件层相邻。 2. 如何自动生成GND层? 首先使用Line命令,对不同GND进行分割…

电脑如何设置个性便签 电脑个性便签分享

每次坐在电脑前,我都仿佛置身于一片信息的海洋。工作、生活、学习,方方面面的事情都需要我用心去记录。在这样一个快节奏的时代,电脑无疑成了我最得力的助手。但记事的时候,我总希望有一个既方便又有个性的工具,能让我…

何恺明重提十年之争——模型表现好是源于能力提升还是捕获数据集偏置?

想象一下,如果把世界上所有的图片都找来,给它们放到一块巨大的空地上,其中内容相似的图片放得近一些,内容不相似的图片放得远一些(类比向量嵌入)。然后,我随机地向这片空地撒一把豆子&#xff0…

OpenHarmony之媒体组件模块简介

源码 本文基于OpenAtom OpenHarmony(以下简称“OpenHarmony”)3.2 Release源码foundation目录下的player_framework,在OpenHarmony 2.0 Release版本当中,这个模块的名字叫媒体组件模块,为了方便理解我们在本文中仍旧延…

【面试经典 | 150】单词拆分

文章目录 Tag题目来源解题思路方法一:动态规划 写在最后 Tag 【动态规划】【字符串】 题目来源 139. 单词拆分 解题思路 方法一:动态规划 定义状态 定义 dp[i] 表示字符串 s 前 i 个字符组成的字符串(s[0, ..., i-1])是否能被…

0.96寸OLED屏调试 ----(二)

所需设备: 1、USB 转 SPI I2C 适配器;内附链接 2、0.96寸OLED显示模块; 备注:专业版、升级版都适用; 读写控制 SSD1306通过 D/C# 和 R/W# 两位来确定:读/写数据,写命令和读状态四种通信行为。…

AI智能分析网关V4数字农场智能监控方案

随着大数据时代的到来,数据成为国家基础性战略资源,加快数字化转型、以数字化谋求国际竞争新优势已成为全球普遍共识,利用大数据推动经济发展、优化社会治理、改善公共服务成为了世界各国的必然选择。农村为实现产业转型升级和治理创新&#…

安达发|磁性材料智能化转型必经之路之APS高级排产软件

在当今的制造业中,磁性材料的应用非常广泛,它们在电子、电力、通信、汽车等多个行业中扮演着重要角色。随着工业4.0和智能制造的推进,磁性材料行业也面临着智能化转型的挑战。在这一转型过程中,APS(高级计划排程系统&a…

寻找旋转排序数组中的最小值

题目链接 寻找旋转排序数组中的最小值 题目描述 注意点 1 < n < 5000-5000 < nums[i] < 5000nums中的所有整数 互不相同nums原来是一个升序排序的数组&#xff0c;并进行了 1 至 n 次旋转找出并返回数组中的最小元素设计一个时间复杂度为 O(log n) 的算法解决此…

QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点

QT 二维坐标系显示坐标点及点与点的连线-通过定时器自动添加随机数据点 功能介绍头文件C文件运行过程 功能介绍 上面的代码实现了一个简单的 Qt 应用程序&#xff0c;其功能包括&#xff1a; 创建一个 MainWindow 类&#xff0c;继承自 QMainWindow&#xff0c;作为应用程序的…

YB5156是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器

概述: YB5156是一款完整的单节锂离子电池采用恒定电流/恒定电压线性充电器。其底部带有散热片的SOP8封装与较少的外部元件数目使得YB5156成为便携式应用的理想选择。YB5156可以适合USB电源和适配器电源工作。由于采用了内部PMOSFET架构&#xff0c;加上防倒充电路&#xff0c;…

flutter Got socket error trying to find package nested at

flutter Got socket error trying to find package nested at xxx 报错信息&#xff1a;“Got socket error trying to find package nested at” 通常出现在Flutter尝试从pub.dev获取依赖包时&#xff0c;由于网络问题导致无法连接到pub.dev或者无法正确解析包的路径。 例如&…

linux进程间通信IPC方式

前言 Linux环境下&#xff0c;进程地址空间相互独立、彼此隔离&#xff0c;因此进程间的数据不能直接访问。如果要交换数据&#xff0c;必须要通过内核&#xff0c;在内核中开辟一块缓冲区&#xff0c;进程A把数据从用户空间拷贝到内核缓冲区&#xff0c;进程B再把数据从内核缓…

【leetcode】双“指针”

标题&#xff1a;【leetcode】双指针 水墨不写bug 我认为 讲清楚为什么要用双指针 比讲怎么用双指针更重要&#xff01; &#xff08;一&#xff09;快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数…

centos7.9安装mysql

1. 概述 官网&#xff1a;https://www.mysql.com/ MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 MySQL AB 公司开发&#xff0c;MySQL是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的RDBMS (Relational Database Management S…

Linux下线程池详解与实现:提升多任务处理效率的关键

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;マイノリティ脈絡—ずっと真夜中でいいのに。 0:24━━━━━━️&#x1f49f;──────── 4:02 &#x1f504; ◀…

【教程】谈一谈 IPA 上传到 App Store Connect 的几种方法

引言 在应用开发过程中&#xff0c;将应用程序上传到 App Store Connect 是一个关键的环节。本文将探讨几种常见的 IPA 文件上传方法&#xff0c;包括 Xcode、Application Loader、altool、Appuploader以及Transporter。通过本文的介绍和指导&#xff0c;读者将能够了解不同的…

基于springboot+vue+Mysql的超市进销存系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…