3.4.IO流-换行和续写

C++IO流 在C语言中,如果想将一个整形变量的数据转化为字符串格式,如何去做呢?1.使用itoa()函数2.使用sprintf()函数都需要先给出保存结果的空间,那空间要给多大呢,这就不太好界定,但两个函数在转化时而且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。在C++中,可以使用stringstream类对象来避开此问题,在程序中如果想要使用stringstream,必须要包含头文件<sstream>。 阅读详情

一.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();
    }
}

​

运行结果:


四.总结:


14【IO流基础】 一、IO概述 1.1 IO流简介 I(Input)O(Output):中文翻译为输入输出,我们知道计算机的数据不管是软件、视频、音乐、游戏等最终都是存储在硬盘中的,当我们打开后,由CPU将硬盘中的数据读取到内存中来运行。这样一个过程就产生了I/O(输入/输出) 水的流向我们成为水流,数据的流动成为数据流,我们简称为流;数据的流向根据流向的不同,我们分为输入(Input)流和输出(Output)流,简称输入输出流,或称IO流; 1.2 IO流的分类 根据 阅读详情

相关推荐

Delphi 12.3 精简绿色版下载

Delphi精简绿色版基于原版安装,去掉了InterBase、法语、德语、日语,只保留了Delphi Windows 32和Delphi Windows 64桌面开发,其余部分未做任何修改。Delphi精简绿色版不含任何破解,仅供学习和研究,24小时后请自行删除,如需继续使用Delphi,请购买正版。绿色版基于原版安装,未做任何精简和修改。绿色版不含任何破解,仅供学习和研究,24小时后请自行删除,如需继续使用RAD Studio,请购买正版。

全粘工程师 4303

Java | AI+编程 | 如何使用通义灵码提升开发效率

本篇文章影子将带来通义灵码的使用教程。如果你觉得开发过程中存在重复性工作,效率不够高,或者是想要学习AI+编程的相关知识,不妨来看看

yingzix688的博客 4794

动态数据脱敏技术分析

在当前国内信息安全热潮中,数据脱敏作为数据安全的重要一环得到了业界的认可与重视。早在2012年,数据脱敏首次作为一个单独的魔力象限由Gartner发布,Gartner在2014年又提出了:按照数据使用场景,将数据脱敏分为静态数据脱敏(Static data masking-SDM )与动态数据脱敏(Dynamic data masking-DDM )。 可能有人望文生义,认为动态数据脱敏一定比静态数据脱敏高级。非也非也,静态or动态,取决于脱敏的使用场景,主要是以使用场景为由来选择合适的数据脱敏的模式。 本

美创科技的博客 4673

实现数据的续写和换行

请确保文件路径"D:\三国志.txt"指向你要续写的文本文件。通过以上代码,将会在文件末尾追加内容,并在每行结束后添加换行符"\r\n"。运行代码后,打开文件可以看到追加的内容。如果文件不存在,代码会自动创建该文件。变量中的文本修改为你希望追加的内容即可。要实现数据的续写和换行操作,可以使用。类来打开文件并将数据追加到文件末尾。如果需要续写其他内容,只需将。

timi130426的博客 564

【智能教育实践】MOOPer数据集在个性化学习路径规划中的应用

本文探讨了如何利用MOOPer数据集实现从“千人一面”到“千人千面”的个性化学习路径规划。通过分析学习者与平台的交互数据(如练习、反馈、讨论)并结合知识图谱,系统能够动态诊断学生知识状态,并为其推荐最优学习序列。文章详细介绍了基于数据驱动的推荐系统核心技术,包括知识追踪、图谱关联挖掘及排序策略,旨在解决传统在线教育的僵化问题,提升学习效率与动力。

read5的博客 230

GEO数据库数据下载方法总结

#GEO数据下载 GEO是生信分析经常用到的数据库。经常需要从中获取表达矩阵,平台信息,meta信息等,本博文总结了几种下载GEO数据的方法,各有优劣,实际应用过程中自行选择适合自己的。 ##方法一:直接从浏览器中下载 以数据集GSE1001为例, 可以直接点击“Series Matrix Files”获取该样本txt格式的表达谱数据,一般我们认为这种处理过的表达谱数据是没有问题的,当然,具体情况具体分析。 打开下载的文件可以看到许多“#”开头的行,这些是注释信息,一般关注这些注释信息中的“data pr

sakoko_的博客 4万+

c语言中的if(续写)

if的一些使用

YJyangjian5的博客 559

【UG/NX二次开发】记录在二次开发中遇到的坑

【UG/NX二次开发】记录在二次开发中遇到的坑

Trust_MJ的博客 2707

【python实用小脚本系列】Python小白也能玩转文本生成:用代码续写故事

通过今天的分享,你是不是觉得文本生成其实并不难?这个基于N-Gram模型的文本生成器虽然简单,但却非常有趣。你可以根据自己的需求进行扩展,让它在更多的场景中发挥作用。无论是续写故事、生成诗歌,还是做一个简单的聊天机器人,它都能帮你实现。需要完整的源码,请在评论区留言,或私信我。

kylner的博客 681

基于车辆运动学的规划算法 - Hybrid A*/ State Lattice Planning (前置知识:自行车模型、Dubins、Reeds Shepp、多项式曲线、螺旋曲线)

本文将按顺序讲解基于车辆运动学的规划算法,以及需要的前置知识:自行车模型、Dubins和Reeds Shepp曲线、多项式曲线和螺旋曲线

BigDavid123的博客 4860

在 RAP 中把业务对象“搬到网口上”:service definition 与 service binding 的全流程、范式与实战

本文解析了SAP ABAP开发中service definition和service binding的关键作用。service definition负责选择要暴露的CDS实体和行为,形成服务模型;而service binding则将服务绑定到具体协议(如OData),生成可访问的端点。两者分离带来三大优势:支持同一模型多重发布、降低环境迁移耦合度、强化安全治理。文章通过预订业务对象的端到端示例,展示了如何从CDS建模到生成Fiori Elements预览。最后以售后工单业务为例,说明这种架构如何支持内外服务

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 390

Cursor一个使用chatgpt-4的ai辅助编程工具

本篇文章主要讲解cursor 工具的下载和使用,通过cursor可以利用ai辅助进行编程,同时也可以不用魔法使用到chatgpt。作者:任聪聪日期:2023年3月22日用了这个工具,突如其来的一个感慨“或许真的有一点,程序员会成为所谓的高级文员”。那个时候人们只需要画个图,写个需求文档就能做一个引用出来。

任聪聪的博客 4万+

WinCC 7.5 读取 SQL server2016 中的表格数据

环境 win10 SQL Server 2016 WinCC V7.5 SP2 1 安装SQL Server 2016 2 选择服务器名称 .\WINCC 3 建数据库

skr? 7140

IO流中write方法写入文件中的数据如何换行?

Io流汇总内容可能不多,但是细节性的东西非常多,一大意就会搞错。 例1:将字节数据写入FileOutputStream并实现换行功能 public class FileWriterDemo3 { public static void main(String[] args) throws IOException { FileOutputStream fos = new Fi...

你今天真好看呀 8118

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【C++】IO流

缓冲区理解,流的四种位状态,文件读写操作,序列化于反序列化

关注学习C++领域,感谢陪伴,共同进步! 1442

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java中的字符输出流的续写和换行写

续写和换行 续写,追加写:使用两个参数的构造方法 FileWriter​(Filefile, booleanappend) 给一个File对象构造一个FileWriter对象。 FileWriter​(StringfileName, booleanappend) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。 参数: StringfileName,Filefile:写入数据的目的地 boolea...

崔凯洋的博客 1453

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

IO流介绍

通过建立程序与目标文件(C:\a.txt)的连接。调用,将字节数据(97 对应 ASCII 码的字符a)写入文件。调用,释放程序与文件的连接资源。:如果不关闭流资源,程序运行完毕之前此文件一直处于使用状态,无法在外部对此文件操作。

2302_80450135的博客 2266

JAVA入门——IO流

/里面的代码一定被执行,除非虚拟机停止。//适合把资源释放写在这里面。结束资源的占用,不然其他人无法操作这个文件。

2301_80216298的博客 1996

Java基础——IO流(1)——字节流、字符流、IO异常处理

目录 1.IO概述 2.字节流 2.1 一切皆为字节 2.2 字节输出流【OutputStream】 2.3 FileOutputStream类 (1)构造方法 (2)一次写多个字节 (3)续写和换行 2.4 字节输入流【InputStream】 2.5 FileInputStream类 (1)构造方法 (2)一次读取一个字节 (3)一次读取多个字节 (4)练习:文件的...

波波鱼的博客 888

IO流-IO流超详细总结

Java——IO流超详细总结

listeningdu的博客 1314

Java——IO流

存储和读取数据的解决方案IO流和File是息息相关的。

pangyaqi的博客 1707

JAVA基础-Day8-黑马跟课题目-IO流

IO流蛮好玩的

2302_76949164的博客 956

IO流“input”,“output”

细节:Windows操作系统中,Java对回车换行进行了优化,虽然完整的是\r\n,但是我们写其中一个\r或者\n,Java也可以实现换行,因为Java在底层会补全。细节1:write方法的参数是整数,但是实际上写到本地文件中的是整数在ASCII上对应的字符。细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的节san。细节1:参数是字符串表示的路径或者是File对象都是可以的。:用Windows系统自带的记事本打开并且能读懂的文件。细节3:如果文件已经存在,则会清空文件。

TNTxd的博客 337

Java IO流

java io流笔记

triticale的博客 1041

Java后端开发day41--IO流(一)--FileOutputStream&FileInputStream

流的分类、IO流的体系、 字节流:FileOutputStream的书写步骤及细节、写入数据的方法、换行写和续写, FileInputStream的书写步骤及细节、循环读取、文件拷贝中的弊端和改进

2301_80071187的博客 906

java之IO流(一) -- FileOutputStream+FileInputStream

java中IO流之FileInputStream和FileOutputStream

weixin_50533562的博客 2067
上一篇: 6.8.最小生成树
下一篇: 6.9.单源最短路径问题-BFS算法
巧克力拌面
博客等级 码龄3年 1153粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值