Java IO 與文件系統:File 類與流操作詳解

在 Java 編程中,IO(輸入輸出)操作是處理文件和數據流的核心部分。本文將圍繞文件系統、硬盤存儲、Java 的?File?類以及?InputStream?和?OutputStream?的使用進行詳細總結,幫助讀者全面掌握 Java IO 編程的核心知識。


一、IO、存儲與文件系統基礎

1. 存儲設備與硬盤

  • 硬盤:計算機的主要存儲設備,分為機械硬盤(HDD)和固態硬盤(SSD)。

  • 存儲單位:字節(Byte)、千字節(KB)、兆字節(MB)、g字節(GB)等。

  • 讀寫速度:SSD 的讀寫速度遠高于 HDD,但價格更貴。

2. 文件系統

  • 文件系統:操作系統用于管理文件和目錄的機制,常見的有 NTFS(Windows)、EXT4(Linux)、APFS(macOS)。

  • 文件與目錄:文件是數據的集合,目錄是文件的容器。

  • 路徑:文件或目錄在文件系統中的位置,分為絕對路徑和相對路徑。


二、Java 中的?File?類

File?類是 Java 中用于表示文件和目錄路徑名的抽象表示。它可以用于創建、刪除、重命名文件和目錄,以及查詢文件屬性。

1. 創建?File?對象

java

復制

File file = new File("example.txt"); // 相對路徑
File dir = new File("/path/to/directory"); // 絕對路徑

2. 常用方法

方法作用
exists()判斷文件或目錄是否存在。
isFile()判斷是否為文件。
isDirectory()判斷是否為目錄。
createNewFile()創建新文件。
mkdir()創建單級目錄。
mkdirs()創建多級目錄。
delete()刪除文件或空目錄。
listFiles()返回目錄下的文件和子目錄。
getPath()獲取文件或目錄的路徑。
getAbsolutePath()獲取文件或目錄的絕對路徑。
getName()獲取文件或目錄的名稱。
length()獲取文件大小(字節數)。
示例:遍歷目錄

java

復制

File dir = new File("/path/to/directory");
if (dir.isDirectory()) {for (File file : dir.listFiles()) {System.out.println(file.getName());}
}

三、Java 中的流操作

Java 的 IO 流分為字節流和字符流,本文重點介紹字節流(InputStream?和?OutputStream)。


1.?InputStream(字節輸入流)

InputStream?是所有字節輸入流的基類,用于從數據源(如文件、網絡)讀取字節數據。

常用方法
方法作用
read()讀取一個字節,返回 -1 表示結束。
read(byte[] b)讀取字節到數組,返回實際讀取的字節數。
close()關閉流,釋放資源。
示例:讀取文件內容

java

復制

try (InputStream in = new FileInputStream("example.txt")) {byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = in.read(buffer)) != -1) {System.out.write(buffer, 0, bytesRead);}
} catch (IOException e) {e.printStackTrace();
}

2.?OutputStream(字節輸出流)

OutputStream?是所有字節輸出流的基類,用于將字節數據寫入目標(如文件、網絡)。

常用方法
方法作用
write(int b)寫入一個字節。
write(byte[] b)寫入字節數組。
flush()刷新緩沖區,強制寫入數據。
close()關閉流,釋放資源。
示例:寫入文件內容

java

復制

try (OutputStream out = new FileOutputStream("example.txt")) {String data = "Hello, World!";out.write(data.getBytes());out.flush();
} catch (IOException e) {e.printStackTrace();
}

3. 緩沖流(BufferedInputStream/BufferedOutputStream)

為了提高 IO 性能,Java 提供了緩沖流,通過在內存中緩存數據,減少對底層設備的直接操作。

示例:使用緩沖流

java

復制

try (InputStream in = new BufferedInputStream(new FileInputStream("example.txt"));OutputStream out = new BufferedOutputStream(new FileOutputStream("output.txt"))) {byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = in.read(buffer)) != -1) {out.write(buffer, 0, bytesRead);}
} catch (IOException e) {e.printStackTrace();
}

四、常見問題與面試題

1.?File?類能直接操作文件內容嗎?

  • 答案:不能。File?類只能操作文件元數據(如路徑、大小、權限等),文件內容需要通過流操作。

2.?字節流與字符流的區別?

  • 字節流:以字節為單位操作數據,適用于二進制文件(如圖片、視頻)。

  • 字符流:以字符為單位操作數據,適用于文本文件(如?.txt.csv)。

3.?如何高效地復制大文件?

  • 答案:使用緩沖流(如?BufferedInputStream?和?BufferedOutputStream),減少 IO 操作次數。

4.?try-with-resources?的作用是什么?

  • 答案:自動關閉資源(如流),避免資源泄漏。適用于實現了?AutoCloseable?接口的類。


五、總結

Java 的 IO 操作是處理文件和數據的核心工具,主要包括以下內容:

  1. File?類:用于操作文件和目錄的元數據。

  2. 字節流InputStream?和?OutputStream?用于讀寫字節數據。

  3. 緩沖流:通過緩存提高 IO 性能。

  4. 文件系統:理解文件系統的基本概念有助于更好地管理文件和目錄。

在實際開發中,建議使用?try-with-resources?語句管理資源,并結合緩沖流提高 IO 效率。通過掌握這些知識,可以輕松應對文件操作和數據流處理的編程需求。

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

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

相關文章

我與DeepSeek讀《大型網站技術架構》(13)- 大型網站典型故障案例分析

文章目錄 第13章 大型網站典型故障案例分析日志管理缺陷引發的故障高并發數據庫訪問問題鎖機制濫用導致服務超時緩存運維不當引發的全站癱瘓流程不規范導致的線上事故編程習慣問題引發功能異常生產環境濫用問題其他典型問題總結 第13章 大型網站典型故障案例分析 本章通過九個…

Git與GitHub:它們是什么,有什么區別與聯系?

1.Git是什么? Git 是一個開源的、分布式版本控制系統(Version Control System, VCS),由 Linus Torvalds 于 2005 年開發,最初用于管理 Linux 內核的開發。它的核心功能是跟蹤文件的變更歷史,幫助開發者高效…

江科大51單片機筆記【12】AT24C02(I2C總線)

寫在前言 此為博主自學江科大51單片機(B站)的筆記,方便后續重溫知識 在后面的章節中,為了防止篇幅過長和易于查找,我把一個小節分成兩部分來發,上章節主要是關于本節課的硬件介紹、電路圖、原理圖等理論知識…

ClickHouse SQL優化:從原理到實戰的深度指南

目錄 ?ClickHouse架構核心解析 1.1 列式存儲的利刃與短板 1.2 MergeTree引擎的物理存儲密碼 1.3 向量化執行引擎的運算革命 ?數據建模的黃金法則 2.1 分區鍵設計的二十倍性能差異實驗 2.2 主鍵排序的磁盤命中率法則 2.3 稀疏索引的數學選擇策略 ?SQL優化十誡 3.1 查詢模式反…

面試之《前端常見的設計模式》

前端開發中運用多種設計模式可以提高代碼的可維護性、可擴展性和可復用性。以下是一些常見的前端設計模式: 創建型模式 1. 單例模式 定義:確保一個類只有一個實例,并提供一個全局訪問點。應用場景:在前端中,像全局狀…

Unity Android出包

Unity Android出包 1.Android Studio版本 不能高于Unity的版本 2.so庫 這個庫需要自己拷貝到Android工程當中 3.JDK版本太老 編譯可以正常,但無法運行 File->ProjectStructure->SDK Location->Gradle Setting->Gradle JDK->X:/Android Stuido/jre …

Android 中臨時文件存放路徑選擇

在 Android 中,下載臨時文件通常可以放在以下目錄中,具體選擇取決于應用的需求和目標 Android 版本的限制: 1. 通用臨時目錄(/data/local/tmp/) 這是 Android 系統提供的一個通用臨時目錄,適用于存儲臨時…

【軟件測試】--面試

準備簡歷–面試邀請 投遞簡歷 面試(筆試,HR面試,技術官面試) 入職準備(體檢,背調) 辦理入職(簽合同) 入職培訓 試用期 轉正 【簡歷要點】 1.基本信息 學校專業&#xff…

C盤清理技巧分享:釋放空間,提升電腦性能

目錄 1. 引言 2. C盤空間不足的影響 3. C盤清理的必要性 4. C盤清理的具體技巧 4.1 刪除臨時文件 4.2 清理系統還原點 4.3 卸載不必要的程序 4.4 清理下載文件夾 4.5 移動大文件到其他盤 4.6 清理系統緩存 4.7 使用磁盤清理工具 4.8 清理Windows更新文件 4.9 禁用…

rpm安裝nux-dextop時出現 epel-release is needed的解決方案

大家好,我是愛編程的喵喵。雙985碩士畢業,現擔任全棧工程師一職,熱衷于將數據思維應用到工作與生活中。從事機器學習以及相關的前后端開發工作。曾在阿里云、科大訊飛、CCF等比賽獲得多次Top名次。現為CSDN博客專家、人工智能領域優質創作者。喜歡通過博客創作的方式對所學的…

qt加載VeloView工程

接上一篇點云軟件配置與編譯,使用qt加載需要先完成編譯。編譯完成后到編譯目錄下lidarview-superbuild\common-superbuild\lidarview\build 找到CmakeCache.txt,如下是我的編譯目錄。 使用QT6.5.3加載了CmakeCache.txt,QT5.14還加載不了cmake…

python編寫的一個打磚塊小游戲

游戲介紹 打磚塊是一款經典的街機游戲,玩家控制底部的擋板,使球反彈以擊碎上方的磚塊。當球擊中磚塊時,磚塊消失,球反彈;若球碰到擋板,則改變方向繼續運動;若球掉出屏幕底部,玩家失…

git 基本常用操作,切換分支,合并分支

分支 two 查看所有分支 git branch 切換分支(two) git checkout two 創建并切換到新分支(two) git checkout -b two 提交當前代碼到到源分支 git push --set-upstream origin two 合并分支 1. 切換到目標分支 例如,…

【QT】事件系統入門——QEvent 基礎與示例

一、事件介紹 事件是 應用程序內部或者外部產生的事情或者動作的統稱 在 Qt 中使用一個對象來表示一個事件。所有的 Qt 事件均繼承于抽象類 QEvent。事件是由系統或者 Qt 平臺本身在不同的時刻發出的。當用戶按下鼠標、敲下鍵盤,或者是窗口需要重新繪制的時候&…

自然語言處理初學者指南

文章目錄 一、說明二、自然語言處理發展史2.1 最早的自然語言處理簡介2.2 歷史2.3 NLP 的早期工作 三、NLP的現代方法3.1 單詞編碼3.2 循環神經網絡3.3 強化學習3.4 深度學習 四、更進一步的方法 一、說明 對于初學者來說,自然語言處理的發展歷史非常有必要了解&am…

unittest vs pytest區別

unittest vs pytest 對比 ?unittest 像“手動擋汽車”:操作步驟多,規則嚴格,適合老司機。?pytest 像“自動擋汽車”:開起來輕松,功能強大,適合新手和高效開發。 區別點?unittest?(你學過的&…

CT117E-M4 CubeMX與Keil5 MDK-ARM基礎配置

目錄 1.CubeMX構建項目 2.芯片時鐘配置 2.1 芯片引腳配置 2.2 時鐘樹配置 3.調試接口配置 4.項目管理器Project Manager配置 4.1 project 4.2 Code Generator 5. 生成代碼 6.MDK_ARM配置 6.1 編譯器選擇 ?6.2 調試器配置 7. 創建本地代碼文件夾 8. #include 路徑…

MySQL中有哪幾種鎖?

大家好,我是鋒哥。今天分享關于【MySQL中有哪幾種鎖?】面試題。希望對大家有幫助; MySQL中有哪幾種鎖? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 在MySQL中,鎖是用來控制并發訪問的機制,確…

MongoDB 和 Elasticsearch的區別、優缺點對比,以及選型建議

MongoDB 和 Elasticsearch 在存儲和搜索方面各有特點,適用于不同的場景。以下是它們的區別、優缺點對比,以及選型建議。 1. 概述 MongoDB:分布式 NoSQL 文檔數據庫,基于 BSON(類似 JSON)的文檔存儲&#x…

55.HarmonyOS NEXT 登錄模塊開發教程(九):部署與發布

溫馨提示:本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦! HarmonyOS NEXT 登錄模塊開發教程(九):部署與發布 效果預覽 1. 引言 在前八篇教程中,我們介紹了H…