JavaIO流与字节输出流OutputStream

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.mzph.cn/news/774297.shtml

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

相关文章

C++STL学习之unordered_map与unordered_set(底层Hash)

前言:我们前面已经学习论map和set,现在又冒出来一个unordered_map和unordered_set,这两个有啥差别吗?前面我们已经说过,map和set的底层是红黑树,那unordered_map和unordered_set的底层是什么呢?…

入门指南:使用Spark MLlib进行数据处理和机器学习

引言: 在当今大数据时代,数据处理和机器学习成为了许多企业和数据科学家的核心任务。然而,处理大规模数据和训练复杂的机器学习模型并不容易。幸运的是,Apache Spark提供了一个强大的机器学习库,即Spark MLlib&#xf…

esp32CAM环境搭建(arduino+MicroPython+thonny+固件)

arduino ide 开发工具 arduino版本:1.8.19 arduino ide 中文设置:​ file >> preferences >> ​ arduino IDE 获取 ESP32 开发环境:打开 Arduino IDE ,找到 文件>首选项 ,将 ESP32 的配置链接填入附加开发板管理网…

TypeScript实战使用技巧分享

TypeScript使用分享 前言 本次技术分享是想将自己使用TypeScript(TS)的经验给大家做一个技术分享。主要目的是分享我使用TS的方式或者习惯,以及怎么在项目中更好的使用它,而不是对TS这门语言的学习。并非说需要大家都去这样写&a…

python --dejavu音频指纹识别

Dejavu是一个用于音频指纹识别的Python库,它能够将音频文件转换成独特的指纹,然后通过比对数据库中已知音频的指纹,识别出输入音频的来源或相似音频。Dejavu库支持多种类型的音频文件,包括MP3、WAV等,同时也支持在不同…

【Canvas与艺术】简约式胡萝卜配色汽车速度表

【效果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>胡萝卜色汽车速度仪表盘简化版</title><style type"…

go |struct embedding、generics、goroutine

go 的结构内嵌 注意点&#xff0c;有点像js func main() {fmt.Println("hello zhangbuda...")// 这个内嵌 和 js 有点像co : container{base: base{num: 22,},str: "zhangdbau hahahahah ",}fmt.Println("co: ", co)/*在 Go 语言中&#xff0c;如…

Linux学习第三天(gcc/g++的使用、gdb的使用)

1、gcc的四个阶段 预处理 预处理功能主要包括宏定义&#xff0c;文件包含&#xff0c;条件编译&#xff0c;去注释预处理指令是以#号开头的代码行例子&#xff1a;gcc -E hello.c -o hello.i选项&#xff1a;-E 该选项的作用是让gcc在预处理之后停止编译过程选项&#xff1a;-…

设置mysql 数据库和表 的编码方式UTF-8

要设置 MySQL 数据库表和字段的编码方式为 UTF-8&#xff0c;可以使用下面的SQL语句&#xff1a; 1. 设置数据库默认编码为 UTF-8&#xff1a; ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;2. 创建表时指定编码为 UTF-8&#xff1a…

C# 值类型和引用类型

值类型 传递就是拷贝&#xff0c; a b意味着在内存里我讲b的所有复制了一份&#xff08;复制到a这里&#xff09; 类似C函数传实参 引用类型 传递的是地址 a b意味着我将a也指向了b所指向的内存 类似C函数传指针

2月京东天猫淘宝茗茶电商数据分析(茗茶行业未来趋势分析)

随着消费者对健康饮食和品质生活的追求&#xff0c;茗茶行业受到许多青睐和关注。 根据鲸参谋数据显示&#xff0c;今年2月&#xff0c;茗茶行业在某东平台上销售数据呈现出一种特殊的趋势。销售量总计约450万件&#xff0c;同比去年下滑了7%。&#xff1b;销售额总计6.4亿元&…

排查--[MySQL8.X 所占内存越来越大] 思路

简介 MySQL 是一个常用的关系型数据库管理系统&#xff0c;但是在使用过程中会出现占用内存过大的问题。本文将介绍解决这个问题的步骤&#xff0c;并提供相应的代码和说明。 解决步骤 下面是解决MySQL占用内存过大问题的步骤&#xff1a; erDiagramMySQL --|> 查找占用内存…

Android 开发中 Gradle 使用详解:构建、配置与优化技巧

文章目录 1. 基本概念2. 配置构建脚本2.1 项目级构建脚本2.2 模块级构建脚本 3. 自定义构建变体和应用 flavorDimensions4. 多模块项目4.1 创建模块4.2 配置模块依赖 5. 使用 Gradle 插件6. 使用 Gradle 命令 Gradle 是一种先进的构建工具&#xff0c;它被广泛应用于 Android 开…

Linux安装Maven

一、下载安装Maven 1.1 下载地址 官网下载地址: https://maven.apache.org/download.cgi 1.2 安装版本下载 进入下载页面选择需要的版本进行下载。 1.3 版本安装 将下载完的安装包&#xff0c;上传到Linux服务器上某个目录下&#xff0c;将其解压出来就好。 ## 创建安装…

【Kotlin】Array简介

1 源码 public class Array<T> {public val size: Intpublic inline constructor(size: Int, init: (Int) -> T)public operator fun get(index: Int): T // 重载a[i]运算符public operator fun set(index: Int, value: T): Unit // 重载a[i]x运算符public operator …

Python物理学有限差分微分求解器和动画波形传播

&#x1f3af;要点 Python数值和符号计算&#xff1a; 振动常微分方程&#xff1a;&#x1f3af;中心差分求解器&#xff0c;绘制移动窗口研究长时间序列。&#x1f3af;符号计算离散方程量化误差。&#x1f3af;Python数值对比正向欧拉方法&#xff0c;反向欧拉方法&#xf…

《无名之辈》新手攻略:抢先领取神秘礼包!

欢迎来到《无名之辈》&#xff01;在这个丰富多彩的冒险世界里&#xff0c;你将踏上一段充满挑战与机遇的旅程。以下是针对新手玩家的详尽攻略&#xff0c;助你快速提升实力&#xff0c;成为一名优秀的冒险者。 第一步&#xff1a;迅速起步 当你第一次踏入《无名之辈》的世界时…

文献速递:基于SAM的医学图像分割--SAMUS:适应临床友好型和泛化的超声图像分割的Segment Anything模型

Title 题目 SAMUS: Adapting Segment Anything Model for Clinically-Friendly and Generalizable Ultrasound Image Segmentation SAMUS&#xff1a;适应临床友好型和泛化的超声图像分割的Segment Anything模型 01 文献速递介绍 医学图像分割是一项关键技术&#xff0c;用…

ubuntu卸载Anaconda

1. 删除配置的环境变量 sudo gedit ~/.bashrc # >>> conda initialize >>> # !! Contents within this block are managed by conda init !! __conda_setup"$(/work3/ai_tool/anaconda3/bin/conda shell.bash hook 2> /dev/null)" if [ $? -…

edge浏览器彻底删除用户账号

效果图 操作教程 -- 这个教程里面比较重要的是3,5,8 -- 如果不执行第8步&#xff0c;还是没有任何效果。 -- 教程地址 https://blog.csdn.net/qq_37579133/article/details/128777770 继续删除windows凭据 结束 -----华丽的分割线&#xff0c;以下是凑字数&#xff0c;大家不…