Java—— IO流 第一期

什么是IO流

存儲和讀取數據的解決方案
I:input
O:output
流:像水流一樣傳輸數據

IO流的作用

用于讀寫數據(本地文件,網絡)

IO流的分類

按照流向分類

輸出流:程序 --> 文件
輸入流:文件 --> 程序

按照操作文件的類型分類
字節流:可以操作所有類型的文件
字符流:只能操作純文本文件(用windows系統自帶的記事本打開并且能讀懂的文件,例如txt文件,md文件,xml文件,lrc文件等)

字節流的實現類

操作本地文件的字節輸出流FileOutputStream

可以把程序中的數據寫到本地文件中

?書寫步驟及細節

1.創建字節輸出流對象

????????參數是字符串表示的路徑或者File對象都是可以的
????????如果文件不存在會創建一個新的文件,但是要保證父級路徑是存在的。
????????如果文件已經存在,則會清空文件重新寫
2.寫數據

? ? ? ? 使用write方法,參數為整數,但實際上寫到本地文件中的是整數在ASCII上對應的字符
3.釋放資源?

????????每次使用完流之后都要釋放資源?

代碼演示

import java.io.FileOutputStream;
import java.io.IOException;public class Test1 {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("day04\\a.txt");fos.write(97);fos.close();}
}

如何一次寫入多個數據
方法名稱說明
void write(int b)一次寫一個字節數據
void write(byte[] b)一次寫一個字節數組數據
void write(byte[] b, int off, int len)一次寫一個字節數組的部分數據

代碼演示

import java.io.FileOutputStream;
import java.io.IOException;public class Test2 {public static void main(String[] args) throws IOException {//一次寫一個字節數組數據//有兩種定義數據的形式//直接定義byte數組,將想寫入的數據的ASCII碼存入數組FileOutputStream fos1 = new FileOutputStream("day04\\a.txt");byte[] b1 = {97,98,99,100};fos1.write(b1);fos1.close();//以字符串的形式定義想寫入的數據,再將字符串轉換為byte數組FileOutputStream fos2 = new FileOutputStream("day04\\a.txt");String str = "asdfg";byte[] b2 = str.getBytes();fos2.write(b2);fos2.close();//一次寫一個字節數組的部分數據//第二個參數是字節數組的起始索引//第三個參數是要寫入數據的個數FileOutputStream fos3 = new FileOutputStream("day04\\a.txt");byte[] b3 = {97,98,99,100,101,102};fos3.write(b3,1,3);fos3.close();}
}

如何換行寫

換行寫:使用換行符
windows:\r\n
Linux:\n
Mac:\r
細節:
在windows操作系統當中,java對回車換行進行了優化。
雖然完整的是\r\n,但是我們寫其中一個\r或者\n,也可以實現換行,java在底層會補全
建議:不要省略,還是寫全了

代碼演示

import java.io.FileOutputStream;
import java.io.IOException;public class Test3 {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("day04\\a.txt");String str1 = "abcd";byte[] b1 = str1.getBytes();fos.write(b1);String wrap = "\r\n";byte[] b2 = wrap.getBytes();fos.write(b2);String str3 = "efgh";byte[] b3 = str3.getBytes();fos.write(b3);fos.close();}
}

?

如何續寫

如果想要續寫,打開續寫開關即可
開關位置:創建字節輸出流對象的第二個參數
不寫默認false:表示關閉續寫,此時創建字節輸出流對象會清空文件
手動傳遞true:表示打開續寫,此時創建字節輸出流對象不會清空文件

代碼演示

import java.io.FileOutputStream;
import java.io.IOException;public class Test4 {public static void main(String[] args) throws IOException {FileOutputStream fos1 = new FileOutputStream("day04\\a.txt");String str1 = "abcd";byte[] b1 = str1.getBytes();fos1.write(b1);fos1.close();FileOutputStream fos2 = new FileOutputStream("day04\\a.txt",true);String str2 = "efgh";byte[] b2 = str2.getBytes();fos2.write(b2);fos2.close();}
}

?

操作本地文件的字節輸入流FilelnputStream

可以把本地文件中的數據讀取到程序中來

書寫步驟及細節

1.創建字節輸入流對象

????????如果文件不存在,就直接報錯
2.讀數據

? ? ? ? 利用read方法讀數據,讀出來的是數據在ASCII上對應的數字
????????讀到文件末尾讀不到數據時,read方法返回-1
3.釋放資源

????????每次使用完流必須要釋放資源。

代碼演示

import java.io.FileInputStream;
import java.io.IOException;public class Test5 {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("day04\\a.txt");int b;//空參read一次只能讀取一個數據,利用循環進行讀取//直到讀到末尾讀不到數據時返回-1,結束循環while ((b = fis.read()) != -1) {//讀到的數據是ASCII字符對應的整數//通過char轉化為字符類型System.out.print((char) b);}//abcdefgfis.close();}
}
如何一次讀取多個數據
方法名稱說明
public int read()一次讀一個字節數據
public int read(byte[] buffer)

一次讀一個字節數組數據

每次讀取會盡可能把數組裝滿

返回讀取到的數據個數,讀不到返回-1

讀取的數據字符在byte數組中

代碼演示

import java.io.FileInputStream;
import java.io.IOException;public class Test6 {public static void main(String[] args) throws IOException {FileInputStream fis = new FileInputStream("day04\\a.txt");//定義字節數組接收數據byte[] b = new byte[3];int len;//返回讀取到的數據個數,讀不到返回-1,用len記錄while ((len = fis.read(b)) != -1) {//讀取的數據會存放在byte數組中//新一輪讀取的數據會覆蓋在byte數組中的舊數據//最后一次讀取時,會出現數據讀不滿byte數組的情況//此時,byte數組中后面的部分數據不會被覆蓋//所以需要len(讀取到的數據個數),讀取幾個輸出幾個String str = new String(b, 0, len);System.out.println(str);}//abc//def//gfis.close();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80538.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80538.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80538.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

物聯網安全技術的最新進展與挑戰

隨著物聯網(IoT)技術的飛速發展,越來越多的設備被連接到互聯網,從智能家居設備到工業控制系統,物聯網正在深刻改變我們的生活和生產方式。然而,物聯網的安全問題也日益凸顯,成為制約其發展的關鍵…

【深度學習基礎】損失函數與優化算法詳解:從理論到實踐

【深度學習基礎】損失函數與優化算法詳解:從理論到實踐 一、引言 1. 損失函數與優化算法在深度學習中的核心作用 在深度學習中,模型訓練的本質是通過不斷調整參數,使模型輸出盡可能接近真實值。這一過程的核心驅動力是損失函數(…

mvc-review

review: 1.Servlet生命周期中初始化方法:init(),init(config) public void init(ServletConfig config) throws ServletException { this.config config; this.init(); } 因此,如果我們需要…

YouTube視頻字幕轉成文章算重復內容嗎?

很多創作者誤以為「自己說的話不算抄襲」,卻不知道YouTube自動生成的字幕早已被搜索引擎存檔。 去年就有案例:某美食博主將教程視頻字幕轉為圖文,結果原創度檢測僅42%,導致頁面權重暴跌。 本文揭秘5個實操技巧:從刪除…

R語言數據可視化

R note book 文檔–輸出html格式文檔,plotly不能生成PDF文件 --- title: "R語言數據可視化" output: html_notebook ---在R語言中進行數據可視化是數據分析和呈現的重要環節,R提供了多種強大的繪圖系統和工具。以下是常見的數據可視化方法和示…

Axure難點解決分享:垂直菜單展開與收回(4大核心問題與專家級解決方案)

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝!如有幫助請訂閱專欄! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 課程主題:垂直菜單展開與收回 主要內容:超長菜單實現、展開與收回bug解釋、Axure9版本限制等問題解…

云原生攻防2(Docker基礎補充)

Docker基礎入門 容器介紹 Docker是什么 Docker是基于Linux內核實現,最早是采用了 LXC技術,后來Docker自己研發了runc技術運行容器。 它基于Google Go語言實現,采用客戶端/服務端架構,使用API來管理和創建容器。 虛擬機 VS Docker Namespace 內核命名空間屬于容器非常核…

Spring Boot 攔截器:解鎖5大實用場景

一、Spring Boot中攔截器是什么 在Spring Boot中,攔截器(Interceptor)是一種基于AOP(面向切面編程)思想的組件,用于在請求處理前后插入自定義邏輯,實現權限校驗、日志記錄、性能監控等非業務功能…

Vue百日學習計劃Day24-28天詳細計劃-Gemini版

總目標: 在 Day 24-27 熟練掌握 Vue.js 的各種模板語法,包括文本插值、屬性綁定、條件渲染、列表渲染、事件處理和表單綁定,并能結合使用修飾符。 所需資源: Vue 3 官方文檔 (模板語法): https://cn.vuejs.org/guide/essentials/template-syntax.htmlVu…

分布式微服務系統架構第125集:AI大模型

加群聯系作者vx:xiaoda0423 倉庫地址:https://webvueblog.github.io/JavaPlusDoc/ https://1024bat.cn/ 一、user 表(用戶表) sql 復制編輯 create table if not exists user (id bigint auto_increment comment id pri…

機器學習 Day16 聚類算法 ,數據降維

聚類算法 1.簡介 1.1 聚類概念 無監督學習:聚類是一種無監督學習算法,不需要預先標記的訓練數據 相似性分組:根據樣本之間的相似性自動將樣本歸到不同類別 相似度度量:常用歐式距離作為相似度計算方法 1.2 聚類vs分類 聚類&…

【Linux】第十八章 調優系統性能

1. 系統管理員可以使用哪個命令來更改tuned守護進程的設置? tuned 的調優配置集存儲在 /usr/lib/tuned(默認) 和 /etc/tuned(自定義 或當前有效)目錄下。每個配置集都有一個單獨的目錄,目錄中包含 tuned.c…

【JVS更新日志】企業文檔AI助手上線、低代碼、智能BI、智能APS、AI助手5.14更新說明!

項目介紹 JVS是企業級數字化服務構建的基礎腳手架,主要解決企業信息化項目交付難、實施效率低、開發成本高的問題,采用微服務配置化的方式,提供了低代碼數據分析物聯網的核心能力產品,并構建了協同辦公、企業常用的管理工具等&…

ollama調用千問2.5-vl視頻圖片UI界面小程序分享

1、問題描述: ollama調用千問2.5-vl視頻圖片內容,通常用命令行工具不方便,于是做了一個python UI界面與大家分享。需要提前安裝ollama,并下載千問qwen2.5vl:7b 模型,在ollama官網即可下載。 (8G-6G 顯卡可…

Web 架構之會話保持深度解析

文章目錄 一、引言二、會話保持的基本概念2.1 什么是會話2.2 為什么需要會話保持 三、會話保持的常見實現方式3.1 基于客戶端的會話保持3.1.1 Cookie 方式3.1.2 URL 重寫方式 3.2 基于服務器端的會話保持3.2.1 負載均衡器會話保持3.2.2 會話共享 四、會話保持可能遇到的問題及解…

Maven 項目中將本地依賴庫打包到最終的 JAR 中

文章目錄 前言詳細步驟 前言 在現代后端開發中,構建高效且可擴展的 Web 應用程序通常依賴于多種第三方庫和內部依賴。這些依賴可以來自公共倉庫,也可能是公司內部自研的庫或尚未發布到公共倉庫的 JAR 包。本文將詳細介紹如何在 Maven 項目中處理本地依賴…

快速定位到源碼位置的插件 - vite/webpack

1. vite-plugin-vue-devtools npm i vite-plugin-vue-devtools -D vite.config.js中配置 import vueDevTools from vite-plugin-vue-devtoolsexport default defineConfig({server: {port: 5173,host: 0.0.0.0},plugins: [vue(),vueJsx(),vueDevTools({componentInspector: t…

基于AH1101芯片的5V升18.6V LED恒流背光供電方案設計

基于AH1101芯片的5V升18.6V LED恒流背光供電方案設計 在現代電子設備中,LED背光技術因其高效、節能、壽命長等優點被廣泛應用于各類顯示設備。本文將詳細介紹如何利用AH1101高效升壓恒流驅動芯片,實現從5V輸入電壓升壓至18.6V,為LED背光板提供…

16.1 - VDMA視頻轉發實驗之TPG

文章目錄 1 實驗任務2 系統框圖3 硬件設計3.1 IP核配置3.2 注意事項 4 軟件設計4.1 注意事項4.2 工程源碼4.2.1 main.c文件 1 實驗任務 基于14.1,使用Xilinx TPG(Test Pattern Generator) IP提供視頻源,將視頻數據通過VDMA寫入PS…

認識Docker/安裝Docker

一、認識Docker Docker的定義 Docker 是一個開源的應用容器引擎,允許開發者將應用及其依賴打包到一個輕量級、可移植的容器中。容器化技術使得應用可以在任何支持 Docker 的環境中運行,確保環境一致性。 Docker的核心組件 Docker Engine:負責…