JavaEE 初階文件操作與 IO 詳解

一、文件操作基礎:File 類

作用:操作文件或目錄(創建、刪除、獲取信息)。
核心方法

  • exists():文件是否存在
  • createNewFile():創建新文件
  • mkdir():創建目錄
  • delete():刪除文件或目錄

代碼示例

import java.io.File;
import java.io.IOException;public class FileCreateDemo {public static void main(String[] args) {// 1. 創建文件對象(不實際創建文件)File file = new File("test.txt");try {// 2. 創建文件(需處理 IOException)if (file.createNewFile()) {System.out.println("文件創建成功");} else {System.out.println("文件已存在");}} catch (IOException e) {e.printStackTrace();}// 3. 創建目錄(單層)File dir = new File("mydir");if (dir.mkdir()) {System.out.println("目錄創建成功");}// 4. 創建多級目錄File multiDir = new File("parent/child");if (multiDir.mkdirs()) {System.out.println("多級目錄創建成功");}}
}

重點

  • new File("路徑")?只是創建對象,不會實際創建文件。
  • 操作可能拋出?IOException,必須處理異常。
  • createNewFile():原子性操作,文件不存在時創建并返回?true
  • mkdir()?與?mkdirs():后者可創建多級目錄
  • 路徑分隔符:Windows 用?\(需轉義為?\\),Linux/Mac 用?/

2. 刪除與判斷文件屬性

public class FileDeleteDemo {public static void main(String[] args) {File file = new File("test.txt");// 1. 刪除文件(立刻刪除,非移到回收站)if (file.delete()) {System.out.println("文件刪除成功");}// 2. 判斷文件屬性System.out.println("是否隱藏文件: " + file.isHidden());System.out.println("是否可讀: " + file.canRead());System.out.println("最后修改時間: " + file.lastModified());}
}
二、IO 流分類與核心類
1. 按方向分
  • 輸入流:從文件/網絡讀取數據 →?InputStream,?Reader
  • 輸出流:向文件/網絡寫入數據 →?OutputStream,?Writer
2. 按數據類型分

類型字節流(二進制)字符流(文本)
輸入InputStreamReader
輸出OutputStreamWriter

為什么需要字符流
直接處理文本更方便,自動處理字符編碼(如 UTF-8)。

三、字節流實戰:文件復制

代碼示例

import java.io.*;public class FileCopy {public static void main(String[] args) {// 1. 定義輸入輸出文件File srcFile = new File("source.jpg");File destFile = new File("copy.jpg");// 2. 使用 try-with-resources 自動關閉流try (InputStream is = new FileInputStream(srcFile);OutputStream os = new FileOutputStream(destFile)) {// 3. 緩沖區提高效率byte[] buffer = new byte[1024];int len;while ((len = is.read(buffer)) != -1) {os.write(buffer, 0, len); // 寫入實際讀取的字節數}System.out.println("文件復制完成");} catch (IOException e) {e.printStackTrace();}}
}

重點

  • try-with-resources?自動關閉流,避免資源泄漏。
  • 緩沖區大小(如 1024)影響性能,通常設為 4KB~8KB。
  • read()?返回實際讀取字節數,避免寫入多余數據。
  • 逐字節讀寫效率極低,需優化為緩沖區讀寫。
四、字符流實戰:讀寫文本文件

代碼示例(處理中文不亂碼)

import java.io.*;public class TextFileDemo {public static void main(String[] args) {// 寫入文件(UTF-8編碼)try (Writer writer = new FileWriter("data.txt", StandardCharsets.UTF_8)) {writer.write("你好,JavaEE!\n");writer.write("Hello, World!");} catch (IOException e) {e.printStackTrace();}// 讀取文件try (Reader reader = new FileReader("data.txt", StandardCharsets.UTF_8);BufferedReader br = new BufferedReader(reader)) {String line;while ((line = br.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();}}
}

重點

  • FileWriter/FileReader?默認使用系統編碼,建議顯式指定(如 UTF-8)。
  • BufferedReader?提升讀取效率,readLine()?逐行讀取。
    五、緩沖流:性能優化利器

    代碼示例

  • public class BufferedByteStreamDemo {public static void main(String[] args) {try (InputStream is = new FileInputStream("source.jpg");BufferedInputStream bis = new BufferedInputStream(is); // 添加緩沖OutputStream os = new FileOutputStream("copy.jpg");BufferedOutputStream bos = new BufferedOutputStream(os)) {byte[] buffer = new byte[8192]; // 8KB 緩沖區int len;while ((len = bis.read(buffer)) != -1) {bos.write(buffer, 0, len); // 寫入實際讀取的字節數}} catch (IOException e) {e.printStackTrace();}}
    }
    

    重點

  • 緩沖流(BufferedXXX)通過減少物理 IO 次數提升性能。
  • 默認緩沖區大小 8KB,可根據需求調整。
  • 沖區大小通常設為 4096(4KB)~ 8192(8KB)
  • BufferedInputStream?內部維護 8KB 緩沖區,減少物理磁盤訪問次數
六、NIO 新特性:更簡潔的文件操作

Java NIO(New IO)核心類

  • Path:替代?File?類,路徑操作更靈活
  • Files:提供靜態方法簡化文件操作

代碼示例

import java.nio.file.*;public class NioDemo {public static void main(String[] args) {Path source = Paths.get("source.txt");Path target = Paths.get("backup.txt");try {// 復制文件(自動覆蓋)Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);// 讀取所有行(UTF-8)List<String> lines = Files.readAllLines(source);lines.forEach(System.out::println);// 寫入文件Files.write(target, "新內容".getBytes());} catch (IOException e) {e.printStackTrace();}}
}

重點

  • Files.copy()?比傳統 IO 更簡潔。
  • readAllLines()?適合小文件,大文件仍需流式讀取。
七、高級應用場景

1. 文件監控(WatchService)

public class FileWatcherDemo {public static void main(String[] args) throws IOException {WatchService watchService = FileSystems.getDefault().newWatchService();Path dir = Paths.get("."); // 監控當前目錄dir.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,StandardWatchEventKinds.ENTRY_DELETE,StandardWatchEventKinds.ENTRY_MODIFY);while (true) {WatchKey key = watchService.take(); // 阻塞直到事件發生for (WatchEvent<?> event : key.pollEvents()) {System.out.println("事件類型: " + event.kind());System.out.println("文件: " + event.context());}key.reset(); // 重置監聽}}
}

2. 大文件逐行處理(內存優化)

public class LargeFileProcessor {public static void main(String[] args) {try (Stream<String> lines = Files.lines(Paths.get("bigdata.txt"))) {lines.filter(line -> line.contains("error")).forEach(System.out::println);} catch (IOException e) {e.printStackTrace();}}
}
八、核心總結
  1. 選擇流類型
    • 文本文件 → 字符流(Reader/Writer)
    • 圖片/視頻 → 字節流(InputStream/OutputStream)
  2. 性能優化
    • 使用緩沖流(BufferedXXX)
    • 合理設置緩沖區大小
  3. 資源管理
    • 必須用?try-with-resources?或手動關閉流
  4. NIO 優勢
    • 更簡潔的 API
    • 支持異步和非阻塞 IO(高級特性)

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

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

相關文章

C++(27): 標準庫 <iterator>

目錄 1. 核心概念 2. 基本語法 3. 特點 4. 特有成員函數與工具 5. 內存與性能 6. 示例代碼 7. 成員函數與類型 8. 使用場景 9. 注意事項 1. 核心概念 迭代器(Iterator) 是 C++ 中用于訪問和遍歷容器元素的通用接口,類似于指針,但支持更豐富的操作。 抽象訪問機制:…

談談 Kotlin 中的構造方法,有哪些注意事項?

在 Kotlin 中&#xff0c;構造方法分為主構造方法&#xff08;Primary Constructor&#xff09;和次構造方法&#xff08;Secondary Constructor&#xff09;。 1 主構造方法 主構造方法是類的核心構造方法&#xff0c;直接在類頭聲明&#xff0c;位于類名之后。 1.1 基本語…

年會招標抽獎活動軟件———仙盟創夢IDE

年會是企業一年的總結與歡慶時刻&#xff0c;而抽獎環節更是點燃全場氣氛的關鍵。如何讓抽獎環節既大氣又充滿儀式感&#xff1f;選對抽獎軟件至關重要&#xff01;本文精心挑選了 3 款兼具實用性與氛圍感的年會抽獎軟件&#xff0c;從界面設計到功能特色&#xff0c;全方位為你…

安全軟件檢測進程異常行為-Postgresql應用執行異常指令whoami

文章目錄 環境癥狀問題原因解決方案 環境 系統平臺&#xff1a;UOS&#xff08;海光&#xff09; 版本&#xff1a;4.5.8 癥狀 數據庫安裝包&#xff1a; 安全軟件告警中提示“sh -c whoami”命令&#xff0c;是由數據庫發出的&#xff0c;安全軟件捕獲到了postgres.exe–fo…

車載診斷架構 --- LIN 節點 ECU 故障設計原則

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 鈍感力的“鈍”,不是木訥、遲鈍,而是直面困境的韌勁和耐力,是面對外界噪音的通透淡然。 生活中有兩種人,一種人格外在意別人的眼光;另一種人無論…

GPU加速的AlphaFold3蛋白質復合體預測:如何在64GB顯存下跑超大規模模型(混合精度+模型并行實戰技巧)

一、AlphaFold3的超大規模挑戰與優化方向 AlphaFold3作為當前生物計算領域的革命性工具&#xff0c;其核心架構基于擴散模型&#xff0c;能夠預測包含蛋白質、核酸、小分子配體等復雜生物復合物的三維結構。然而&#xff0c;模型參數量級&#xff08;典型配置超百億級&#xf…

Qt功能區:Ribbon控件

控件 1. 按鈕1.1 多選按鈕1.2 2. 下拉列表框SARibbonComboBox2.1 簡介2.2 代碼實現 1. 按鈕 1.1 多選按鈕 軟件功能&#xff1a;用于實現Category的名稱居中。 SARibbonCheckBox繼承于QCheckBox&#xff0c;使用方法完全相同。 SARibbonCheckBox* checkBox new SARibbonChe…

一個由微軟開源的 Python 工具,用于將多種文件格式轉換為 Markdown 格式

&#x1f4da; Markitdown 由微軟開源的 Python 工具&#xff0c;用于將多種文件格式轉換為 Markdown 格式 支持&#xff1a;PDF、PowerPoint、Word、Excel、圖像、音頻、HTML、文本格式&#xff08;CSV、JSON、XML&#xff09;、ZIP 文件的轉換。 它旨在提供一個簡單且靈活的…

Linux的進程概念

目錄 1、馮諾依曼體系結構 2、操作系統(Operating System) 2.1 基本概念 2.2 目的 3、Linux的進程 3.1 基本概念 3.1.1 PCB 3.1.2 struct task_struct 3.1.3 進程的定義 3.2 基本操作 3.2.1 查看進程 3.2.2 初識fork 3.3 進程狀態 3.3.1 操作系統的進程狀態 3.3…

export和import的書寫方式

一、導出模塊&#xff08;export&#xff09; 1. 命名導出&#xff08;Named Exports&#xff09; // math.js export const PI 3.14159; // 導出單個常量 export function sum(a, b) { return a b; } // 導出單個函數 export class Calculator { /* ..…

HOW - 結合 AI 進行 Tailwind 樣式開發

文章目錄 情況 1&#xff1a;使用 Tailwind CSS 與手寫傳統 CSS 的開發效率對比情況 2&#xff1a;AI Tailwind 自動生成 UI 的效率如何&#xff1f;總結 在 WHAT - Tailwind 樣式方案&#xff08;不寫任何自定義樣式&#xff09; 中我們已經簡單介紹過 Tailwind。今天主要認識…

java面試每日一背 day1

1.什么是緩存穿透 緩存穿透是指查詢一個數據庫中根本不存在的數據&#xff0c;導致這個查詢請求繞過緩存直接訪問數據庫的情況。這種情況如果頻繁發生&#xff0c;會對數據庫造成不必要的壓力。 典型特征&#xff1a; &#xff08;1&#xff09;查詢的數據在數據庫和緩存中都…

ngx_http_realip_module 模塊概述

一、使用場景 日志記錄 記錄真實客戶端 IP 而非反向代理的 IP&#xff0c;有助于流量分析和安全審計。訪問控制 基于真實 IP 實現防火墻規則&#xff08;allow/deny&#xff09;或限流&#xff0c;而非誤將上游 IP 視為客戶端。GeoIP、WAF、限速等功能 模塊化的上游真實 IP 支…

實戰5:個性化數字藝術生成與銷售

盈利思路 數字藝術銷售&#xff1a; 平臺銷售&#xff1a;將生成的數字藝術作品上傳到像OpenSea、Foundation等NFT平臺進行售賣。每一件獨特的藝術品可以通過NFT技術保證其唯一性&#xff0c;吸引收藏家和投資者。 定價策略&#xff1a;根據作品的復雜度、創意性以及市場需求來…

游戲引擎學習第303天:嘗試分開對Y軸和Z軸進行排序

成為我們自己的代碼精靈α 所以現在應該可以正常使用了。不過&#xff0c;這兩周我們沒辦法繼續處理代碼里的問題&#xff0c;而之前留在代碼里的那個問題依然存在&#xff0c;沒有人神奇地幫我們修復&#xff0c;這讓人挺無奈的。其實我們都希望有個神奇的“代碼仙子”&#…

InetAddress 類詳解

InetAddress 類詳解 一、核心作用 封裝 IP 地址&#xff1a;同時支持 IPv4 和 IPv6 地址域名解析&#xff1a;將域名轉換為 IP 地址&#xff08;DNS 查詢&#xff09;地址驗證&#xff1a;檢查網絡地址的有效性無構造方法&#xff1a;通過靜態工廠方法獲取實例 二、核心方法 …

spring cloud alibaba-Geteway詳解

spring cloud alibaba-Gateway詳解 Gateway介紹 在 Spring Cloud Alibaba 生態系統中&#xff0c;Gateway 是一個非常重要的組件&#xff0c;用于構建微服務架構中的網關服務。它基于 Spring Cloud Gateway 進行擴展和優化&#xff0c;提供了更強大的功能和更好的性能。 Gat…

iOS 直播技術及優化

iOS直播技術的實現和優化涉及多個技術環節&#xff0c;需結合協議選擇、編解碼方案、播放器技術及性能調優等多方面。 一、核心技術實現 協議選擇與傳輸優化 HLS&#xff08;HTTP Live Streaming&#xff09;&#xff1a;蘋果官方推薦&#xff0c;基于HTTP分片傳輸&#xff0c…

目標檢測135個前沿算法模型匯總(附源碼)!

目標檢測是計算機視覺核心方向之一&#xff0c;也是發論文的熱門領域&#xff01; 近來不僅YOLO算法迎來了新突破&#xff0c;迭代出YOLOv12&#xff01;Mamba、大模型等新技術的發展&#xff0c;也給該領域注入了全新的力量&#xff0c;取得了諸多顯著成果。比如性能飆升82.3…

期刊采編系統安裝升級錯誤

我們以ojs系統為例&#xff1a; PHP Fatal error: Uncaught Error: Call to a member function getId() on null in /esci/data/html/classes/install/Upgrade.inc.php:1019 Stacktrace: #0 /esci/data/html/lib/pkp/classes/install/Installer.inc.php(415): Upgrade->con…