4.换行和续写

一.FileOutputStream写出数据的两个小问题:

问题一:换行

假设在本地文件中要输出数据aweihaoshuai 666,在输出这个数据时要换行写出,如下图:

问题二:续写

假设在一个文本文件中已经存在数据aweihaoshuai,如果此时再次写入数据如diyishuai,若不想把原来的数据清空,而是想接着写即续写,如下图:(按照之前的写法使用write方法写出数据会把原有的数据清空再写出数据)


二.换行:

1.换行符:

将数据写入文本文件的过程中,要想实现换行,只需要写出一个换行符即可(注意:不同的操作系统中换行符是不同的)。

操作系统换行符
Windows操作系统\r\n,叫做"回车换行"(\r为回车,\n为换行)
Linux操作系统\n,叫做"换行"(\n为换行)
Mac操作系统(苹果操作系统)\r,叫做"回车"(\r为回车)

对于Windows操作系统,以下图为例:

Windows操作系统的换行符是\r\n,叫做"回车换行"(\r为回车,\n为换行),下面介绍该换行符的来源:在早期的cmd中存在一个规则,比如在上述图片的第25行打字,如果要在第26行开始打字,就需要两步操作,第一步首先要在当前行即第25行回车,以前的回车与现有的回车不一样,回车在早期的系统中是把光标放到这一行的开头即放到第25行的第一个字符o前,换行才是真正的把光标移动到下一行即第26行,所以要想实现把光标从第25行的最后一个字符w的后面移动到第27行,就需要先回车到第25行的第一个字符o前,再换行到第26行,Windows操作系统延续了这个操作。

细节:Windows操作系统中完整的换行符是\r\n,但Java对Windows操作系统的换行符\r\n进行了优化,就是写其中一个\r或者\n,Java也可以实现换行,因为Java在底层会进行补全->建议:不要省略,还是写全了比较好。

2.代码演示:

a.创建ByteStreamDemo4类与a.txt文本文件,如下图:

b.把kankelaoyezuishuai写出到文本文件a.txt,代码如下:

package com.itheima.mybytestream;
​
import java.io.FileOutputStream;
import java.io.IOException;
​
public class ByteStreamDemo4 {public static void main(String[] args) throws IOException {//1.创建对象FileOutputStream fos=new FileOutputStream("a.txt");
​//2.写出数据/*需求:现在要把kankelaoyezuishuai写出到文本文件a.txt,其中需要用到write方法,* 但是在写的过程中该如何写呢?难道要一次一次地调用write方法传入要写出的字符的ASCII码吗,* 显然比较繁琐,因为要写入的数据可能会很长,因此要使用其他方法,解决方案如下: *///2.1.创建一个字符串->字符串就是要写出的内容String str="kankelaoyezuishuai";//2.2.str调用空参的getBytes方法:getBytes方法可以把str变成字节数组(字节数组存放的就是对应字符的ASCII码),有了字节数组就可以用write方法一起写到文件中byte[] arr = str.getBytes(); //getBytes方法的返回值是byte[]//2.3.写出数据fos.write(arr);
​//3.释放资源fos.close();}
}

运行结果:

c.在a.txt文件原有数据的基础上,换行写出数据666

package com.itheima.mybytestream;
​
import java.io.FileOutputStream;
import java.io.IOException;
​
public class ByteStreamDemo4 {public static void main(String[] args) throws IOException {//1.创建对象FileOutputStream fos=new FileOutputStream("a.txt");
​//2.写出数据String str1="kankelaoyezuishuai";byte[] bytes1 = str1.getBytes();fos.write(bytes1);String str2="666";byte[] bytes2 = str2.getBytes();fos.write(bytes2);
​//3.释放资源fos.close();}
}
​

运行结果:

666并没有被换行处理,正确的写法需要在写出666之前写出一个换行符,修改方案如下:

package com.itheima.mybytestream;
​
import java.io.FileOutputStream;
import java.io.IOException;
​
public class ByteStreamDemo4 {public static void main(String[] args) throws IOException {//1.创建对象FileOutputStream fos=new FileOutputStream("a.txt");
​//2.写出数据String str1="kankelaoyezuishuai";byte[] bytes1 = str1.getBytes();fos.write(bytes1);
​/*再次写出一个换行符即可,注意:不同的操作系统中换行符是不同的*/String wrap="\r\n"; //定义一个字符串记录换行符(此时是Windows操作系统,换行符是\r\n)byte[] bytes2 = wrap.getBytes(); //获取wrap即换行符的ASCII码并放到数组中fos.write(bytes2); //此时就相当于做了一个换行操作
​String str2="666";byte[] bytes3 = str2.getBytes();fos.write(bytes3);
​//3.释放资源fos.close();}
}

运行结果:


三.续写:

1.续写开关:

在创建FileOutputStream对象时,FileOutputStream方法有一个包含两个形参的构造方法->第一个形参是文件,第二个形参是续写开关,如下图:

如下图,首先看FileOutputStream类里最简单的FileOutputStream构造方法:

如上图,该构造方法的形参是字符串name,这个构造方法的底层会把字符串name(name不为空时)表示的路径先变成File对象,第二个参数的默认值是false->所以就是把路径还有false传递给另外一个FileOutputStream构造方法,如下图:

上述图片的FileOutputStream构造方法才是真正的核心代码,该构造方法有两个形参,第一个形参是文件路径,第二个形参是续写开关,

对于第二个形参,如果传递false(默认传递false),意味着关闭续写,所以在创建对象时会把文件进行清空,清空了才保证不是续写的,

如果手动传递true,就表示打开续写,续写功能一旦打开,文件内容就不会被清空了,就会接着原来的数据写入数据。

总结:如果想要续写,打开续写开关即可,开关位置即创建FileOutputStream对象的第二个形参,第二个形参默认是false,表示关闭续写,此时创建对象会清空文件,第二个形参如果手动传递true,表示打开续写,此时创建对象不会清空文件。

2.代码演示:

未续写前:

如上图,此时第9行的FileOutputStream方法只传递了一个参数,意味着默认关闭续写,在a.txt文件中此时已经有两行数据了,现在要在这两行数据不被清空的基础上续写数据,解决方案如下:只需要打开续写即可->FileOutputStream方法的第二个形参手动传入true

package com.itheima.mybytestream;
​
import java.io.FileOutputStream;
import java.io.IOException;
​
public class ByteStreamDemo4 {public static void main(String[] args) throws IOException {//1.创建对象FileOutputStream fos=new FileOutputStream("a.txt",true); //第二个参数传入true,表示打开续写
​//2.写出数据String str1="kankelaoyezuishuai";byte[] bytes1 = str1.getBytes();fos.write(bytes1);
​/*再次写出一个换行符即可,注意:不同的操作系统中换行符是不同的*/String wrap="\r\n"; //定义一个字符串记录换行符(此时是Windows操作系统,换行符是\r\n)byte[] bytes2 = wrap.getBytes(); //获取wrap即换行符的ASCII码并放到数组中fos.write(bytes2); //此时就相当于做了一个换行操作
​String str2="666";byte[] bytes3 = str2.getBytes();fos.write(bytes3);
​//3.释放资源fos.close();}
}

运行结果:


四.总结:


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

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

相关文章

联易融受邀参加上海审计局金融审计处专题交流座谈

近日,联易融科技集团受邀出席了由上海市审计局金融审计处组织的专题交流座谈,凭借其在供应链金融领域的深厚积累和创新实践,联易融为与会人员带来了精彩的分享,进一步加深现场对供应链金融等金融发展前沿领域的理解。 在交流座谈…

SOC估算:开路电压修正的安时积分法

SOC估算:开路电压修正的安时积分法 基本概念 开路电压修正的安时积分法是一种结合了两种SOC估算方法的混合技术: 安时积分法(库仑计数法) - 通过电流积分计算SOC变化 开路电压法 - 通过电池电压与SOC的关系曲线进行校准 方法原…

代码随想录打卡|Day27(合并区间、单调递增的数字、监控二叉树)

贪心算法 Part05 合并区间 力扣题目链接 代码随想录链接 视频讲解链接 题目描述: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组&#xff0…

PostgreSQL的扩展 pg_cron

PostgreSQL的扩展 pg_cron pg_cron 是 PostgreSQL 的一个开源扩展,它允许在数据库内部使用 cron 语法调度定期任务,是最接近 Oracle DBMS_SCHEDULER 的解决方案。 一 安装与配置 1 安装方法 下载路径: https://github.com/citusdata/pg_…

卷积神经网络迁移学习:原理与实践指南

引言 在深度学习领域,卷积神经网络(CNN)已经在计算机视觉任务中取得了巨大成功。然而,从头开始训练一个高性能的CNN模型需要大量标注数据和计算资源。迁移学习(Transfer Learning)技术为我们提供了一种高效解决方案,它能够将预训练模型的知识…

图论---朴素Prim(稠密图)

O( n ^2 ) 题目通常会提示数据范围&#xff1a; 若 V ≤ 500&#xff0c;两种方法均可&#xff08;朴素Prim更稳&#xff09;。 若 V ≤ 1e5&#xff0c;必须用优先队列Prim vector 存图。 // 最小生成树 —朴素Prim #include<cstring> #include<iostream> #i…

Spring-Cache替换Keys为Scan—负优化?

背景 使用ORM工具是往往会配合缓存框架实现三级缓存提高查询效率&#xff0c;spring-cache配合redis是非常常规的实现方案&#xff0c;如未做特殊配置&#xff0c;CacheEvict(allEntries true) 的批量驱逐方式&#xff0c;默认使用keys的方式查询历史缓存列表而后delete&…

【N8N】Docker Desktop + WSL 安装过程(Docker Desktop - WSL update Failed解决方法)

背景说明&#xff1a; 因为要用n8n&#xff0c;官网推荐这个就下载了&#xff0c;然后又是一堆卡的安装问题记录过程。 1. 下载安装包 直接去官网Get Docker | Docker Docs下载 下载的是第一个windows - x86_64. &#xff08;*下面那个beta的感觉是测试版&#xff09; PS&am…

RT Thread 发生异常时打印输出cpu寄存器信息和栈数据

打印输出发生hardfault时,当前栈十六进制数据和cpu寄存器信息 在发生 HardFault 时,打印当前栈的十六进制数据和 CPU 寄存器信息是非常重要的调试手段。以下是如何实现这一功能的具体步骤和示例代码。 1. 实现 HardFault 处理函数 我们需要在 HardFault 中捕获异常上下文,…

【安装neo4j-5.26.5社区版 完整过程】

1. 安装java 下载 JDK21-windows官网地址 配置环境变量 在底下的系统变量中新建系统变量&#xff0c;变量名为JAVA_HOME21&#xff0c;变量值为JDK文件夹路径&#xff0c;默认为&#xff1a; C:\Program Files\Java\jdk-21然后在用户变量的Path中&#xff0c;添加下面两个&am…

android jatpack Compose 多数据源依赖处理:从状态管理到精准更新的架构设计

Android Compose 多接口数据依赖管理&#xff1a;ViewModel 状态共享最佳实践 &#x1f4cc; 问题背景 在 Jetpack Compose 开发中&#xff0c;经常遇到以下场景&#xff1a; 页面由多个独立接口数据组成&#xff08;如 Part1、Part2&#xff09;Part2 的某些 UI 需要依赖 P…

面试之消息队列

消息队列场景 什么是消息队列&#xff1f; 消息队列是一个使用队列来通信的组件&#xff0c;它的本质就是个转发器&#xff0c;包含发消息、存消息、消费消息。 消息队列怎么选型&#xff1f; 特性ActiveMQRabbitMQRocketMQKafka单机吞吐量万级万级10万级10万级时效性毫秒级…

GStreamer 简明教程(十一):插件开发,以一个音频生成(Audio Source)插件为例

系列文章目录 GStreamer 简明教程&#xff08;一&#xff09;&#xff1a;环境搭建&#xff0c;运行 Basic Tutorial 1 Hello world! GStreamer 简明教程&#xff08;二&#xff09;&#xff1a;基本概念介绍&#xff0c;Element 和 Pipeline GStreamer 简明教程&#xff08;三…

Linux kernel signal原理(下)- aarch64架构sigreturn流程

一、前言 在上篇中写到了linux中signal的处理流程&#xff0c;在do_signal信号处理的流程最后&#xff0c;会通过sigreturn再次回到线程现场&#xff0c;上篇文章中介绍了在X86_64架构下的实现&#xff0c;本篇中介绍下在aarch64架构下的实现原理。 二、sigaction系统调用 #i…

华为OD机试真题——简易内存池(2025A卷:200分)Java/python/JavaScript/C++/C/GO最佳实现

2025 A卷 200分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析&#xff1b; 并提供Java、python、JavaScript、C、C语言、GO六种语言的最佳实现方式&#xff01; 本文收录于专栏&#xff1a;《2025华为OD真题目录全流程解析/备考攻略/经验…

腾讯一面面经:总结一下

1. Java 中的 和 equals 有什么区别&#xff1f;比较对象时使用哪一个 1. 操作符&#xff1a; 用于比较对象的内存地址&#xff08;引用是否相同&#xff09;。 对于基本数据类型、 比较的是值。&#xff08;8种基本数据类型&#xff09;对于引用数据类型、 比较的是两个引…

计算机网络中的DHCP是什么呀? 详情解答

目录 DHCP 是什么&#xff1f; DHCP 的工作原理 主要功能 DHCP 与网络安全的关系 1. 正面作用 2. 潜在安全风险 DHCP 的已知漏洞 1. 协议设计缺陷 2. 软件实现漏洞 3. 配置错误导致的漏洞 4. 已知漏洞总结 举例说明 DHCP 与网络安全 如何提升 DHCP 安全性 总结 D…

2025 年导游证报考条件新政策解读与应对策略

2025 年导游证报考政策有了不少新变化&#xff0c;这些变化会对报考者产生哪些影响&#xff1f;我们又该如何应对&#xff1f;下面就为大家详细解读新政策&#xff0c;并提供实用的应对策略。 最引人注目的变化当属中职旅游类专业学生的报考政策。以往&#xff0c;中专学历报考…

【物联网】基于LORA组网的远程环境监测系统设计(ThingsCloud云平台版)

演示视频: 基于LORA组网的远程环境监测系统设计(ThingsCloud云平台版) 前言:本设计是基于ThingsCloud云平台版,还有另外一个版本是基于机智云平台版本,两个设计只是云平台和手机APP的区别,其他功能都一样。如下链接: 【物联网】基于LORA组网的远程环境监测系统设计(机…

SQL 函数进行左边自动补位fnPadLeft和FORMAT

目录 1.问题 2.解决 方式1 方式2 3.结果 1.问题 例如在SQL存储过程中&#xff0c;将1 或10 或 100 长度不足的时候&#xff0c;自动补足长度。 例如 1 → 001 10→ 010 100→100 2.解决 方式1 SELECT FORMAT (1, 000) AS FormattedNum; SELECT FORMAT(12, 000) AS Form…