Java文件操作:從“Hello World”到“Hello File”

在這里插入圖片描述

🔍 開發者資源導航 🔍
🏷? 博客主頁: 個人主頁
📚 專欄訂閱: JavaEE全棧專欄

文件

什么是文件?

廣義:操作系統進行資源管理的一種機制,很多的軟件/硬件資源,抽象成“文件”來進行表示。

狹義:保存在硬盤上的文件

文件種類

二進制文件:根據馮諾依曼結構,所有的文件都是二進制的。

文本文件:文本文件是二進制文件中特殊的文件,它的二進制數據恰好可以構成字符,并且翻譯過來可以構成有意義的信息。

區分方法:使用筆記本打開,能看懂的就是文本文件。

絕對路徑和相對路徑

路徑是文件在電腦上的存儲位置,計算機可以通過路徑來找到文件,而路徑又分為絕對路徑和相對路徑。

  • 絕對路徑:從根路徑到目的文件的完整位置。
D:\Lenovo\Documents
  • 相對路徑:以某一個路徑為基準的路徑,假設你的基準為下述路徑中的py_code,那么5.23.py的相對路徑就是/5.23.py,code的相對路徑就是./
D:\code\py_code\5.23.py

在相對路徑中./表示上一層目錄,../表示上兩層目錄(注:沒有.../)。

正斜杠與反斜杠

在路徑的表達中/\在不同的操作系統作為分隔符來用,在主流的操作系統中/是最常使用的,但是Windos因為歷史遺留問題使用的是/來當做路徑分隔符,但是現在的Windos系統兩種分隔符都可以支持。

Java文件操作

java針對文件操作:

  1. 文件系統操作(刪除、新建、重命名)
  2. 文件內容操作(針對一個文件的內容進行讀和寫)
方法說明常用場景
boolean exists()檢查文件/目錄是否存在操作文件前的安全檢查
boolean isFile()判斷是否是普通文件區分文件和目錄
boolean isDirectory()判斷是否是目錄遍歷目錄時檢查
String getName()獲取文件/目錄名稱獲取文件名(不含路徑)
String getPath()獲取完整路徑字符串顯示或記錄文件路徑
String getAbsolutePath()獲取絕對路徑需要絕對路徑的場景
long length()獲取文件大小(字節數)檢查文件大小
boolean createNewFile()創建新空文件需要新建文件時
boolean mkdir()創建單層目錄新建目錄
boolean mkdirs()創建多級目錄創建嵌套目錄結構
boolean delete()刪除文件/空目錄文件清理
String[] list()列出目錄內容遍歷目錄文件
File[] listFiles()列出目錄內容(返回File對象)需要操作子文件時
boolean canRead()檢查是否可讀權限檢查
boolean canWrite()檢查是否可寫權限檢查
long lastModified()獲取最后修改時間文件監控/同步

代碼演示:

  public static void main(String[] args) throws IOException {String fileName = "D:/tmp/crashes/a.txt";File file = new File(fileName);//createNewFile如果不存在創建并返回true否則只返回Falseif (file.createNewFile()) {System.out.println(file.exists());System.out.println("創建成功!");} else {System.out.println("文件已存在!");}System.out.println(file.getPath());System.out.println(file.lastModified());}

在這里插入圖片描述
稍微會用即可,如果工作中有需要再查看API文檔。

進階代碼:查看當前目錄下的所有的文件

    public static void main(String[] args) {File file = new File("D:\\code");dfs(file, 0);}public static void dfs(File file, int cnt) {if (file.isDirectory()) {for (int i = 0; i < cnt * 2; i++) {System.out.printf(" ");}System.out.printf(file.getName() + "{\n");for (File f: file.listFiles()) {dfs(f, cnt + 1);}for (int i = 0; i < cnt * 2; i++) {System.out.printf(" ");}System.out.printf("}\n");}else {for (int i = 0; i < cnt * 2; i++) {System.out.printf(" ");}System.out.println(file.getName() + " ");}}//為了輸出好看一些,代碼寫的有點丑哈哈~

流操作

Java 中的文件流操作是 I/O 系統的核心部分,主要用于讀寫文件數據。

流類型特點典型類
字節流以字節(8bit)為單位操作InputStream/OutputStream
字符流以字符(16bit)為單位操作Reader/Writer
緩沖流帶緩沖區的高效流BufferedInputStream
轉換流字節流與字符流轉換InputStreamReader

字節和字符

字節!=字符,一個字符占多少字節由編碼方式決定。例如一個漢字utf-8中占三個字節,而在gbk中占兩個字節。

字節流

// 文件復制(字節流)
try (InputStream in = new FileInputStream("source.txt");OutputStream out = new FileOutputStream("target.txt")) {byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = in.read(buffer)) != -1) {out.write(buffer, 0, bytesRead);}
} catch (IOException e) {e.printStackTrace();
}

字符流

// 文本文件讀取(字符流)
try (BufferedReader reader = new BufferedReader(new FileReader("text.txt"))) {String line;while ((line = reader.readLine()) != null) {System.out.println(line);}
} catch (IOException e) {e.printStackTrace();
}

注意事項

流操作相關的類都需要進行手動關閉,gc雖然能夠管理內存,但是不能自動管理文件,需要咱們手動釋放。如果不釋放就會引起文件資源泄露問題。

因此我們建議使用try-with-resources來進行自動關閉,在try()小括號里面創建并且實現了Closable接口的類都會在結束時自動關閉,而流操作恰好符合這個方式。

try (BufferedReader reader = new BufferedReader(new FileReader("text.txt"))) {//代碼邏輯
}

總結

字符流和字節流的兩個代碼,都是對的,不矛盾的~~字節流讀到的是文件中原始的數據,在硬盤上保存文件的時候,就是6 個字節(utf-8)。

如果是文本文件建議使用字符流,二進制文件建議使用字節流。


感謝各位的觀看Thanks?(・ω・)ノ,如果覺得滿意的話留個關注再走吧。

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

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

相關文章

2025第三屆黃河流域網絡安全技能挑戰賽--Crypto--WriteUp

2025第三屆黃河流域網絡安全技能挑戰賽–Crypto–WriteUp Crypto sandwitch task from Crypto.Util.number import * import gmpy2 flag bflag{fake_flag} assert len(flag) 39 p getPrime(512) q getPrime(512) n p * q e 0x3 pad1 beasy_problem pad2 bHow_to_so…

三重天理論

第一重天&#xff1a;公理層&#xff08;形而上地基&#xff09; 這里構建的是人類理性的"操作系統"&#xff0c;公理作為不證自明的邏輯起點&#xff08;如矛盾律/同一律&#xff09;&#xff0c;恰似海德格爾所說的"存在之鏡"。黑格爾辯證法在此顯現為動…

2025年第八屆廣西大學生程序設計大賽(正式賽)題解(更新中)

知乎評價&#xff1a;如何評價2025年第八屆GXCPC廣西大學生程序設計大賽暨中國-東盟國際大學生程序設計大賽&#xff1f; 榜單&#xff1a;牛客比賽排名 題目鏈接&#xff1a;第八屆廣西大學生程序設計大賽暨2025邀請賽 TIP&#xff1a;提交處可查看別人過題代碼 難度簽到題普通…

WHAT - 兆比特每秒 vs 兆字節每秒

文章目錄 Mbps 解釋Mbps 和 MB/s&#xff08;兆字節每秒&#xff09;換算總結網絡場景1. 在路由器設置中的 Mbps2. 在游戲下載時的 Mbps / MB/s總結 Mbps 解釋 首先&#xff0c;Mbps 是一個常見的網絡帶寬單位&#xff0c;意思是&#xff1a; Megabits per second&#xff08;…

[C語言實戰]C語言內存管理實戰:實現自定義malloc與free(四)

[C語言實戰]C語言內存管理實戰&#xff1a;實現自定義malloc與free&#xff08;四&#xff09; 摘要&#xff1a;通過實現簡化版的內存管理器&#xff0c;深入理解動態內存分配的核心原理。本文包含內存塊設計、分配算法、空閑合并策略的完整實現&#xff0c;并附可運行的代碼…

YOLOv8源碼修改(5)- YOLO知識蒸餾(下)設置蒸餾超參數:以yolov8-pose為例

目錄 前言 1. 不同蒸餾算法資源占用 2. 不動態調整蒸餾損失 2.1 訓練定量化結果 2.1 訓練結果可視化結果 3. 動態調整蒸餾損失權重及實驗分析 3.1 余弦衰減和指數衰減 3.2 CWD蒸餾損失 3.3 MGD蒸餾損失 3.4 AT蒸餾損失 3.5 SKD和PKD蒸餾損失 4. 調權重心得總結 5…

歷年華東師范大學保研上機真題

2025華東師范大學保研上機真題 2024華東師范大學保研上機真題 2023華東師范大學保研上機真題 在線測評鏈接&#xff1a;https://pgcode.cn/school?classification1 簡單一位數代數式計算 題目描述 給一個小學生都會算的1位數與1位數運算的代數式&#xff0c;請你求出這個表…

Oracle 中 SHRINK 與 MOVE 操作的比較

Oracle 中 SHRINK 與 MOVE 操作的比較 在 Oracle 數據庫中&#xff0c;SHRINK 和 MOVE 都是用于重組表和索引以減少空間碎片的重要操作&#xff0c;但它們在實現方式和適用場景上有顯著區別。 SHRINK 操作 基本語法 ALTER TABLE table_name SHRINK SPACE [COMPACT] [CASCAD…

展銳 Android 15 鎖定某個App版本的實現

Android 15 系統鎖定Antutu版本的實現方法 在Android系統開發中,有時需要鎖定特定應用的版本以確保系統穩定性或測試一致性。本文將介紹如何通過修改Android源碼來鎖定Antutu跑分軟件的版本。 修改概述 這次修改主要涉及以下幾個方面: 禁用產品復制文件的檢查添加指定版本…

視頻剪輯SDK定制開發技術方案與報價書優雅草卓伊凡

視頻剪輯SDK定制開發技術方案與報價書-優雅草卓伊凡 一、項目概述 客戶需求&#xff1a;開發一套跨平臺&#xff08;Android/iOS/Uni-App&#xff09;視頻剪輯SDK&#xff0c;包含AI字幕提取、轉場特效、文字疊加、背景音樂、濾鏡、背景替換、動態貼紙等功能。 報價范圍&#…

BGP為什么要配置對等IP?

本文由deepseek生成&#xff0c;特此聲明 一、為什么要配置對等體IP&#xff1f; 1. 明確標識鄰居身份 路由協議需求&#xff1a;動態路由協議&#xff08;如BGP、OSPF、RIP&#xff09;需要路由器之間建立鄰居關系以交換路由信息。配置對等體IP是為了唯一標識鄰居路由器&…

Qt中配置文件讀寫

1. 保存分組數據到配置文件 #include <QSettings>void saveNetworkConfig() {QSettings settings("network.ini", QSettings::IniFormat);// 網絡配置分組settings.beginGroup("Network");// 源地址配置settings.beginGroup("Source");se…

Linux 的編輯器--vim

1.Linux編輯器-vim使? vi/vim的區別簡單點來說&#xff0c;它們都是多模式編輯器&#xff0c;不同的是vim是vi的升級版本&#xff0c;它不僅兼容vi的所有指令&#xff0c;?且還有?些新的特性在??。例如語法加亮&#xff0c;可視化操作不僅可以在終端運?&#xff0c;也可以…

SAP Commerce(Hybris)開發實戰(二):登陸生成token問題

問題簡述 最近處理Hybris框架標準的登陸功能&#xff0c;遇到一個問題&#xff1a;用兩個不同的瀏覽器&#xff0c;同時登陸一個賬號&#xff0c;會同時生成兩個不同的token和refreshToken。 問題原因 解決了其實非常簡單&#xff0c;就是Hybris的Employee表中&#xff0c;有一…

c/c++的opencv椒鹽噪聲

在 C/C 中實現椒鹽噪聲 椒鹽噪聲&#xff08;Salt-and-Pepper Noise&#xff09;&#xff0c;也稱為脈沖噪聲&#xff08;Impulse Noise&#xff09;&#xff0c;是數字圖像中常見的一種噪聲類型。它的特點是在圖像中隨機出現純白色&#xff08;鹽&#xff09;或純黑色&#x…

LIEDNet: A Lightweight Network for Low-light Enhancement and Deblurring論文閱讀

摘要 夜間拍攝的圖像常常面臨諸如低光和模糊等挑戰&#xff0c;這些問題主要是由于昏暗環境和長時間曝光的頻繁使用所導致。現有方法要么獨立處理這兩種退化問題&#xff0c;要么依賴于通過復雜機制生成的精心設計的先驗知識&#xff0c;這導致了較差的泛化能力和較高的模型復…

談談worldquant中設置的幾個意思

Decay 是一個設置&#xff0c;用于確定要反映多少過去的位置。正如我們之前詳細介紹的那樣&#xff0c;Decay 值越高&#xff0c;Alpha 周轉率越低。但是&#xff0c;請注意&#xff0c;Alpha 的夏普比率可能會隨著信息延遲而降低。 創建 Alpha 時&#xff0c;頭寸可能會集中在…

大模型和AI工具匯總(一)

一、國內可免費使用的大模型&#xff08;持續更新&#xff09; DeepSeek 模型介紹&#xff1a;DeepSeek 系列包括 DeepSeek V3&#xff08;通用場景&#xff09;、DeepSeek R1&#xff08;推理模型&#xff09;&#xff0c;支持高達 64K 上下文長度&#xff0c;中文場景表現優…

HarmonyOS NEXT 技術特性:分布式軟總線技術架構

HarmonyOS NEXT 技術特性&#xff1a;分布式軟總線技術架構 隨著物聯網發展&#xff0c;2030 預計全球聯網設備達 2000 億&#xff0c;異構設備互聯難題凸顯&#xff0c;分布式軟總線作為 HarmonyOS 生態核心&#xff0c;以軟件虛擬總線打破物理局限&#xff0c;讓跨品牌設備即…

什么是VR展館?VR展館的實用價值有哪些?

VR展館&#xff0c;重塑展覽體驗。在數字化時代浪潮的推動下&#xff0c;傳統的實體展館經歷前所未有的變革。作為變革的先鋒&#xff0c;VR展館以無限的潛力&#xff0c;成為展覽行業的新寵。 VR展館&#xff0c;即虛擬現實展館&#xff0c;是基于VR&#xff08;Virtual Real…