Java文件IO

White graces:個人主頁

🙉專欄推薦:Java入門知識🙉

🙉?內容推薦:JUC常見類🙉

🐹今日詩詞:東風吹柳日初長,雨馀芳草斜陽🐹


??點贊???收藏??關注💬卑微小博主🙏

??點贊???收藏??關注💬卑微小博主🙏


目錄

什么是IO

什么是文件

文件的存儲

文件的路徑

絕對路徑

相對路徑

文件檢索

文本文件和二進制文件

Java操作文件

File類

patSeparator

File的構造方法

常見函數方法

文件創建

基準目錄

文件刪除

創建一級目錄

創建多級目錄

文件重命名

讀寫文件,打開關閉文件

字節流讀數據

read()方法無參版本

read(byte [] bytes)方法有參版本

read(bytep[] bytes, int off, int len)

關閉文件

文件描述符表

字節流寫數據

字符流讀數據

Unicode和Utf8編碼

字符流寫數據

字符流和字節流與Scanner的愛情火花

文件搜索功能

文件復制功能

文件內容搜索功能

美圖分享


什么是IO

這個不是靠感覺來的, 有人為的規定

什么是文件

文件夾是不是文件?

是文件: 文件夾被稱作目錄文件, 也是文件的一種

文件的存儲

文件存儲背后的數據結構是一個多叉樹

文件的路徑

絕對路徑

windows從此電腦出發, 此電腦到指定文件的路徑稱為絕對路徑

相對路徑

從某一文件出發, 某一文件到指定文件的路徑被稱為相對路徑

文件檢索

檢索通過? ?./? ?和 ../? 兩個基礎操作檢索

舉例:

1. 在bin目錄下查找qq.exe文件

2. 在bin目錄的上一級目錄(QQ目錄)查找qq.exe

3. 在其他目錄下查找qq.exe

文本文件和二進制文件

文本文件: 存儲文本數據, 這些數據是合法的字符

二進制文件: 存啥都行(本質上是01都構成的)

如何區分文本文件和二進制文件

方法: 使用記事本打開, 亂碼的是二進制文件, 不亂碼的就是文本文件

Java操作文件

Java標準庫內置了File類, 可以用來對文件進行操作

我們來看看File的屬性和參數

File類

patSeparator

pathSeparator: 分割符?

File的構造方法

有三個構造方法

我們來看看第二個如何使用吧!

常見函數方法

文件創建

基準目錄

基準目錄: 通常是程序當前工作的目錄

文件刪除

還有一種刪除方式

deleteOnExit() 這種刪除方式是程序運行完畢后才會刪除文件

創建一級目錄

通過mkdir()方法創建出一級目錄

多級目錄就是目錄里面套目錄

創建多級目錄

通過mkdirs()方法創建多級目錄

文件重命名

?通過renameTo()方法進行文件重命名????????

讀寫文件,打開關閉文件

Java中讀文件寫文件打開關閉文件和"流"這樣的類相關

流(stream)分成字節流和字符流

字節流: 以字節為單位讀寫數據

字符流: 以字符為單位讀寫數據

字節流讀文件: InputStream

字節流寫文件: OutputStream

字符流寫文件: Writer

字符流讀文件: Reader

字節流和字符從文件中讀數據方法相同: read()

字節流和字符從文件中寫數據方法相同: write()

字節流讀數據

InputStream類: 這個類可以打開一個文件

類里的方法可以對文件進行讀取數據的操作

正確使用方法: 雖然他是一個抽象類需要實現read()方法, 但是這樣很麻煩,而且耦合性很大,

因此標準庫提供了它的子類, 已經幫我們實現好了, 這個子類就是FileInputStream

read()方法無參版本

read(byte [] bytes)方法有參版本

read(bytep[] bytes, int off, int len)

關閉文件

打開文件, 用完之后要關閉

關閉文件: close()

文件描述符表

文件描述符表: 記錄文件的IO信息

每打開文件時就會消耗資源記錄信息, 關閉問價就會釋放資源

close()方法是一個非常重要的方法, 打開文件之后一定要記得關閉, 某些情況下即使寫了close方法也不一定會執行到, 比如下面這種情況

文件沒有及時關閉的影響: 大部分情況下沒啥影響, 如果多次打開文件,不去關閉文件, 導致文件描述符表被占滿, 占滿之后執行打開文件操作就會失敗,

解決辦法

可以把close()方法放到finally中

這種寫法不是很優雅, 有一種更好的寫法

try with resource

注意: 并不是所有的類都能放到try( ) 里, 只有實現了Closeable接口的類才可以, 這種寫法在{ }

的代碼執行完畢后會自動調用close方法

字節流寫數據

OutputStream類: 這個類可以打開文件, 并且類里的方法可以向文件寫入數據

OutputStream類中的write方法可以讓我們向文件里寫入數據

字符流讀數據

Reader類用于讀取字符流數據, 并且會自動打開對應的文件

類里的read方法可以讀取字符類型的數據

read方法有四種版本

Unicode和Utf8編碼

字符流寫數據

Writer類: 可以打開指定文件, 如果不存在就會創建一個, 之后可以使用Writer類里的方法向文件中寫入數據

write方法有四個版本

字符流和字節流與Scanner的愛情火花

以前我們都是Scanner scanner = new Scanner(System.in)的方式去輸入信息

現在學了字節流和字符流讀寫數據, 因此可以讓他們配合使用

文件搜索功能

文件的基礎操作我們已經了解了, 我們可以基于這些方法寫一個文件搜索功能

明確需求:

1.?輸入一個路徑

2. 輸入一個關鍵詞

3. 在這個路徑下查找文件, 這個文件名和關鍵詞相同

文件復制功能

這個功能就比較簡單了

要求: 輸入兩個路徑復制路徑和目的路徑, 然后將復制路徑文件的內容復制到目的路徑文件中

解決步驟:?

1. 創建目的文件

2. 讀取文件內容

3. 將內容復制到指定目錄文件中

import java.util.*;
import java.io.*;
//復制文件操作
public class Solution {public static void main(String[] args) throws IOException {//輸入兩個文件路徑, 復制路徑和目標路徑Scanner scanner = new Scanner(System.in);System.out.println("請輸入要復制的文件路徑: ");String src = scanner.next();System.out.println("請輸入目的路徑: ");String des = scanner.next();//判斷路徑是否合法File srcfile = new File(src);if (!srcfile.isFile()) {System.out.println("輸入復制文件的路徑不合法");return;}File desfile = new File(des);if(!desfile.getParentFile().isDirectory()) {//因為目的文件本事就不存在,所以判斷它上一級目錄文件存不存在System.out.println("輸入的目的路徑非法");return;}//1.創建文件//這里通過寫的方式自動創建文件OutputStream outputStream = new FileOutputStream(desfile);//2.讀取文件內容InputStream inputStream = new FileInputStream(srcfile);//3.寫入文件內容int a = 0;while (a != -1) {byte[] bytes = new byte[1024];a = inputStream.read(bytes);outputStream.write(bytes);}}
}

測試一下

文件內容搜索功能

要交:

輸入一個路徑和關鍵詞, 在這個路徑下, 查找文件內容(不是文件名)包含關鍵詞的文件

解題步驟

1. 判斷路徑是否非法

2. 遍歷文件

3. 遍歷文件內容

4. 返回文件路徑

import java.util.*;
import java.io.*;
public class Solution {public static void main(String[] args) throws IOException {Scanner scanner = new Scanner(System.in);System.out.println("請輸入要搜索的路徑: ");String path = scanner.next();System.out.println("請輸入文件內容的關鍵詞: ");String str = scanner.next();//1.判斷路徑是否存在File pathfile = new File(path);if (!pathfile.exists()) {System.out.println("搜索路徑非法!");return;}//2. 遍歷路徑下的所有文件SearchFile(pathfile, str);}public static void SearchFile(File pathfile, String str) throws IOException {if (pathfile == null) {return;}if (pathfile.isDirectory()) {File[] files = pathfile.listFiles();//如果是一個目錄文件就繼續遞歸for (File file : files) {SearchFile(file, str);}} else {//是普通文件, 就遍歷文件內容Searchstr(pathfile, str);}}public static void Searchstr(File pathfile, String str) throws IOException{Reader reader = new FileReader(pathfile);int a = 0;StringBuilder tmp = new StringBuilder();while( a != -1) {a = reader.read();tmp.append((char) a);if (tmp.indexOf(str) >= 0) {System.out.println("找到了符合條件的文件: " + pathfile.getAbsolutePath());return;}}}
}

運行結果

美圖分享

?🎆謝謝你的閱讀和耐心!祝愿你在編程的道路上取得更多的成功與喜悅!"🎆?🎄

??點贊收藏加關注,學習知識不迷路??

🎉??💪🎉??💪🎉??💪🎉??💪🎉

👍😏??點贊??收藏??關注😏👍

👍😏??點贊??收藏??關注😏👍

👍😏??點贊??收藏??關注😏👍

🙆?♂?🙆?♂?🙆?♂?🙆?♂?🙆?♂?🙆?♂?🙆?♂?🙆?♂?🙆?♂?🙆?♂?🙆?♂?🙆?♂?🙆?♂?

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

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

相關文章

Three.js 研究:4、創建設備底部旋轉的科技感圓環

1、實現效果 2、PNG轉SVG 2.1、原始物料 使用網站工具https://convertio.co/zh/png-svg/進行PNG轉SVG 3、導入SVG至Blender 4、制作旋轉動畫 4.1、給圓環著色 4.2、修改圓環中心位置 4.3、讓圓環旋轉起來 參考一下文章 Three.js 研究:1、如何讓物體動起來 Thre…

LeetCode # 1070. 產品銷售分析 III

1070. 產品銷售分析 III 題目 銷售表 Sales: ------------------ | Column Name | Type | ------------------ | sale_id | int | | product_id | int | | year | int | | quantity | int | | price | int | ------------------ (sale_id, year) 是這張表的主鍵&am…

“論SOA在企業集成架構設計中的應用”必過模板,突擊2024軟考高項論文

考題部分 企業應用集成(Enterprise Application Integration, EAI)是每個企業都必須要面對的實際問題。面向服務的企業應用集成是一種基于面向服務體系結構(Service-OrientedArchitecture,SOA)的新型企業應用集成技術,強調將企業和組織內部的資源和業務功…

VSCode界面Outline只顯示類名和函數名,隱藏變量名

參考鏈接 https://blog.csdn.net/Zjhao666/article/details/120523879https://blog.csdn.net/Williamcsj/article/details/122401996 VSCode中界面左下角的Outline能夠方便快速跳轉到文件的某個類或函數,但默認同時顯示變量,導致找某個函數時很不方便。…

mimkatz獲取windows10明文密碼

目錄 mimkatz獲取windows10明文密碼原理 lsass.exe進程的作用 mimikatz的工作機制 Windows 10的特殊情況 實驗 實驗環境 實驗工具 實驗步驟 首先根據版本選擇相應的mimikatz 使用管理員身份運行cmd 修改注冊表 ?編輯 重啟 重啟電腦后打開mimikatz 在cmd切換到mi…

Seq2Seq模型:詳述其發展歷程、深遠影響與結構深度剖析

Seq2Seq(Sequence-to-Sequence)模型是一種深度學習架構,專為處理從一個輸入序列到一個輸出序列的映射任務設計。這種模型最初應用于機器翻譯任務,但因其靈活性和有效性,現已被廣泛應用于自然語言處理(NLP&a…

醫院該如何應對網絡安全?

在線醫生咨詢受到很多人的關注,互聯網醫療行業的未來發展空間巨大,但隨著醫院信息化建設高速發展 醫院積累了大量的患者基本信息、化驗結果、電子處方、生產數據和運營信息等數據 這些數據涉及公民隱私、醫院運作和發展等多因素,醫療行業辦…

【QEMU中文文檔】1.關于QEMU

本文由 AI 翻譯(ChatGPT-4)完成,并由作者進行人工校對。如有任何問題或建議,歡迎聯系我。聯系方式:jelin-shoutlook.com。 QEMU 是一款通用的開源機器仿真器和虛擬化器。 QEMU 可以通過幾種不同的方式使用。最常見的用…

OrangePi AIpro--新手上路

目錄 一、SSH登錄二、安裝VNC Sevice(經測試Xrdp遠程桌面安裝不上)2.1安裝xface桌面2.2 配置vnc服務2.2.1 設置vnc server6-8位的密碼2.2.2 創建vnc文件夾,寫入xstartup文件2.2.3 給xstartup文件提高權限2.2.4 在安裝產生的vnc文件夾創建xsta…

C# 工廠模式學習

工廠模式(Factory Pattern)是一種創建型設計模式,它提供了一種創建對象的接口,而不是通過具體類來實例化對象。工廠模式可以將對象的創建過程封裝起來,使代碼更具有靈活性和可擴展性。 工廠模式有幾種常見的實現方式&…

Go 如何通過 Kafka 客戶端庫 生產與消費消息

文章目錄 0.前置說明1. confluent-kafka-go2. sarama3. segmentio/kafka-go4. franz-go選擇建議 1.啟動 kafka 集群2.安裝 confluent-kafka-go 庫3.創建生產者特殊文件說明如何查看.log文件內容 4.創建消費者 0.前置說明 Go 語言中有一些流行的 Kafka 客戶端庫。以下是幾個常用…

【Uniapp小程序】自定義導航欄uni-nav-bar滾動漸變色

效果圖 新建activityScrollTop.js作為mixins export default {data() {return {navBgColor: "rgba(0,0,0,0)", // 初始背景顏色為完全透明navTextColor: "rgba(0,0,0,1)", // 初始文字顏色};},onPageScroll(e) {// 設置背景const newAlpha Math.min((e.s…

踩坑:6年后為何不用GraphQL了?

GraphQL 是一項令人難以置信的技術,自從我在 2018 年首次開始將其投入生產以來,它就吸引了很多人的注意力。 在一大堆無類型的 JSON REST API 上構建了許多 React SPA 之后,我發現 GraphQL 是一股清新的空氣。 然而,隨著時間的推…

mybatis用map接收返回對象,不想讓數據類型為tinyint自動轉換為boolean,如何處理

在 MyBatis 中,當使用 Map 來接收查詢結果時,MyBatis 會根據列的數據類型自動選擇合適的 Java 類型來映射這些值。默認情況下,如果數據庫列是 TINYINT(1),MyBatis 可能會錯誤地將其映射為 boolean,因為它經常被誤解為只…

PPP認證兩種:PAP和CHAP,兩次握手和三次握手

CHAP(Challenge-Handshake Authentication Protocol,質詢握手認證協議)的設計理念是增強網絡認證過程的安全性。在CHAP的三次握手過程中,不直接傳送用戶的明文密碼,以此來提高安全性,具體步驟如下&#xff…

開源大模型源代碼

開源大模型的源代碼可以在多個平臺上找到,以下是一些知名的開源大模型及其源代碼的獲取方式: 1. **艾倫人工智能研究所的開放大語言模型(Open Language Model,OLMo)**: - 提供了完整的模型權重、訓練代…

springboot結合mybatis使用多數據源的方式

背景 最近有一個需求,有兩個庫需要做同步數據,一個Doris庫,一個mysql庫,兩邊的表結構一致,這里不能使用navicat等工具提供的數據傳輸之類的功能,只能使用代碼做同步,springboot配置多數據…

如何設置手機的DNS

DNS 服務器 IP 地址 蘋果 華為 小米 OPPO VIVO DNS 服務器 IP 地址 中國大陸部分地區會被運營商屏蔽網絡導致無法訪問,可修改手機DNS解決。 推薦 阿里的DNS (223.5.5.5)或 114 (114.114.114.114和114.114.115.115) 更多公開DNS參考: 蘋果…

ESP32-C3模組上實現藍牙BLE配網功能(1)

本文內容參考: 《ESP32-C3 物聯網工程開發實戰》 樂鑫科技 藍牙的名字由來是怎樣的?為什么不叫它“白牙”? 特此致謝! 一、藍牙知識基礎 1. 什么是藍牙? (1)簡介 藍牙技術是一種無線數據和…

【緩存】OS層面緩存設計機制

操作系統的緩存設計機制是計算機體系結構中的一個重要組成部分,旨在提高系統的性能,特別是通過減少對慢速存儲設備(如硬盤)的訪問次數來加速數據的讀取和寫入。 以下是一些常見的操作系統緩存設計機制: CPU緩存&…