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.pswp.cn/bicheng/78472.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/78472.shtml
英文地址,請注明出處:http://en.pswp.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…