最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章教你學會用Java程序操作文件及避坑指南

 更新時間:2026年06月06日 09:52:20   作者:charlotte10241024  
文件的讀取與寫入操作是Java開發(fā)中的基礎且重要的一環(huán),從傳統(tǒng)的字節(jié)流與字符流到高級的緩沖流與NIO,每種技術都有其適用場景和優(yōu)缺點,這篇文章主要介紹了用Java程序操作文件及避坑指南的相關資料,需要的朋友可以參考下

前言

文件是IO流乃至多線程的基礎,學好文件這一板塊可以為我們后續(xù)進一步學習IO流和多線程打下堅實的基礎。在 Java 開發(fā)中,文件操作是高頻且基礎的核心技能 —— 無論是讀取配置文件、生成日志、導出報表,還是處理用戶上傳的文件,都離不開對文件的創(chuàng)建、讀取、寫入、刪除等操作。本文將從「實用場景」出發(fā),手把手教你掌握 Java 文件操作的核心方法,從傳統(tǒng) IO 到 NIO.2,兼顧基礎與最佳實踐,新手也能快速上手。

一、前置知識:Java 文件操作的核心 API

Java 提供了兩套核心文件操作體系,我們先理清它們的定位,避免用錯工具:

體系核心包 / 類特點適用場景
傳統(tǒng) IOjava.io.FileFileReader、FileWriter兼容性好,API 偏底層簡單文件操作、兼容老項目
NIO.2java.nio.file(Paths、Files)Java 7 新增,API 簡潔、功能強、效率高新項目優(yōu)先使用,支持批量操作、文件屬性管理

本文以NIO.2為主(推薦),同時補充傳統(tǒng) IO 的核心用法,滿足不同場景需求。

二、實戰(zhàn):文件操作核心場景(附完整代碼)

所有示例代碼均可直接復制到 IDE 中運行,建議先創(chuàng)建測試目錄 / 文件,跟著步驟實操。

場景 1:基礎操作(創(chuàng)建、刪除、判斷文件 / 目錄)

這是文件操作的「基本功」,比如創(chuàng)建配置文件、判斷文件是否存在、刪除臨時文件等。

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class FileBasicOperations {
    public static void main(String[] args) {
        // ========== 1. 傳統(tǒng)IO(File類) ==========
        // 定義文件路徑:Windows用\\(轉(zhuǎn)義)或/,Linux/Mac用/
        File file = new File("test.txt");
        
        try {
            // 創(chuàng)建文件(不存在則創(chuàng)建,存在則返回false)
            if (file.createNewFile()) {
                System.out.println("文件創(chuàng)建成功:" + file.getAbsolutePath());
            } else {
                System.out.println("文件已存在");
            }
            
            // 核心判斷:文件/目錄類型
            System.out.println("是否是文件:" + file.isFile());
            System.out.println("是否是目錄:" + file.isDirectory());
            
            // 創(chuàng)建目錄:mkdir(單層)、mkdirs(多層,推薦)
            File dir = new File("testDir/subDir");
            if (dir.mkdirs()) {
                System.out.println("多層目錄創(chuàng)建成功:" + dir.getAbsolutePath());
            }
            
            // 刪除文件/目錄(目錄需為空才能刪除)
            if (file.delete()) {
                System.out.println("文件刪除成功");
            }

        } catch (Exception e) {
            e.printStackTrace(); // 捕獲IO異常(權限不足、路徑不存在等)
        }

        // ========== 2. NIO.2(推薦) ==========
        Path path = Paths.get("test_nio.txt");
        try {
            // 創(chuàng)建文件(先判斷是否存在,避免重復創(chuàng)建)
            if (!Files.exists(path)) {
                Files.createFile(path);
                System.out.println("NIO創(chuàng)建文件成功:" + path.toAbsolutePath());
            }
            
            // 創(chuàng)建多層目錄(無需區(qū)分單層/多層)
            Path dirPath = Paths.get("testDirNio/subDir");
            if (!Files.exists(dirPath)) {
                Files.createDirectories(dirPath);
                System.out.println("NIO創(chuàng)建目錄成功");
            }
            
            // 刪除文件/目錄(支持非空目錄?不,需手動遍歷刪除子文件)
            if (Files.exists(path)) {
                Files.delete(path);
                System.out.println("NIO刪除文件成功");
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

關鍵說明

  • 路徑適配:推薦用Paths.get("目錄", "子目錄", "文件.txt"),自動適配不同系統(tǒng)的分隔符;
  • 異常處理:文件操作必然涉及 IO 異常,必須捕獲或聲明拋出;
  • 目錄刪除:delete()只能刪除空目錄,非空目錄需先遍歷刪除子文件 / 子目錄。

場景 2:文本文件讀?。ㄗ畛S茫?/h3>

讀取配置文件、日志文件、用戶上傳的文本等,NIO.2 的Files.readAllLines是最優(yōu)解。

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class FileReadExample {
    public static void main(String[] args) {
        String filePath = "read_test.txt"; // 先創(chuàng)建該文件并寫入測試內(nèi)容
        
        // 方式1:一次性讀取所有行(推薦,簡潔)
        try {
            // 指定UTF-8編碼,避免中文亂碼
            List<String> lines = Files.readAllLines(Paths.get(filePath), StandardCharsets.UTF_8);
            for (String line : lines) {
                System.out.println("讀取到行:" + line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 方式2:讀取為字節(jié)數(shù)組(兼容文本/二進制文件)
        try {
            byte[] content = Files.readAllBytes(Paths.get(filePath));
            String contentStr = new String(content, StandardCharsets.UTF_8);
            System.out.println("完整內(nèi)容:\n" + contentStr);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

關鍵說明

  • 編碼指定:必須顯式指定StandardCharsets.UTF_8,否則會使用系統(tǒng)默認編碼,導致中文亂碼;
  • 大文件注意:readAllLines/readAllBytes適合小文件(幾十 MB 內(nèi)),大文件需用流逐行讀?。ㄏ挛难a充)。

場景 3:文本文件寫入(覆蓋 / 追加)

生成日志、導出數(shù)據(jù)、寫入配置等場景,核心是「覆蓋寫入」和「追加寫入」。

import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;

public class FileWriteExample {
    public static void main(String[] args) {
        String filePath = "write_test.txt";
        // 要寫入的內(nèi)容(按行存儲)
        List<String> content = Arrays.asList("Java文件操作", "作者:新手學習", "時間:2026");
        
        try {
            // 方式1:覆蓋寫入(文件不存在則創(chuàng)建,存在則清空原有內(nèi)容)
            Files.write(Paths.get(filePath), content, StandardCharsets.UTF_8);
            System.out.println("覆蓋寫入成功");
            
            // 方式2:追加寫入(保留原有內(nèi)容,在末尾添加)
            List<String> appendContent = Arrays.asList("", "——追加的內(nèi)容"); // 空行分隔
            Files.write(
                Paths.get(filePath), 
                appendContent, 
                StandardCharsets.UTF_8, 
                java.nio.file.StandardOpenOption.APPEND // 追加模式
            );
            System.out.println("追加寫入成功");
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

場景 4:遍歷目錄下的所有文件

比如批量處理某目錄下的所有 Excel 文件、統(tǒng)計日志文件數(shù)量等,NIO.2 的Files.walk非常高效。

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class DirectoryTraverseExample {
    public static void main(String[] args) {
        String dirPath = "testDir"; // 目標目錄
        
        // 遍歷目錄(包括子目錄),篩選所有文件
        try (Stream<Path> walk = Files.walk(Paths.get(dirPath))) {
            walk.filter(Files::isRegularFile) // 只保留文件(排除目錄)
                .filter(path -> path.toString().endsWith(".txt")) // 篩選txt文件
                .forEach(path -> System.out.println("符合條件的文件:" + path.toAbsolutePath()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

擴展:大文件讀寫(避免內(nèi)存溢出)

如果文件大小超過 100MB,不能用readAllLines一次性讀取,需用「流」逐行處理:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

public class BigFileOperation {
    public static void main(String[] args) {
        String srcPath = "big_file.txt"; // 大文件路徑
        String destPath = "copy_big_file.txt"; // 復制后的文件
        
        // 逐行讀取+逐行寫入(內(nèi)存占用極低)
        try (BufferedReader br = Files.newBufferedReader(Paths.get(srcPath), StandardCharsets.UTF_8);
             BufferedWriter bw = Files.newBufferedWriter(Paths.get(destPath), StandardCharsets.UTF_8)) {
            
            String line;
            while ((line = br.readLine()) != null) {
                // 可在此處處理每行內(nèi)容(比如過濾、修改)
                bw.write(line);
                bw.newLine(); // 換行
            }
            System.out.println("大文件復制完成");
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

三、避坑指南:新手常犯的錯誤

  1. 中文亂碼:未指定編碼,默認使用系統(tǒng)編碼(Windows 是 GBK,Linux 是 UTF-8),解決:所有讀寫操作顯式指定StandardCharsets.UTF_8;
  2. 路徑錯誤:硬編碼 Windows 路徑(如C:\\test.txt),Linux 下運行報錯,解決:用Paths.get("C:", "test.txt")適配系統(tǒng);
  3. 資源未關閉:傳統(tǒng) IO 的FileInputStream未關閉導致文件被占用,解決:用try-with-resources語法(自動關閉資源);
  4. 權限問題:寫入系統(tǒng)目錄(如 C 盤根目錄)報錯,解決:選擇有寫入權限的目錄(如項目根目錄、用戶目錄)。

四、總結

  1. Java 文件操作優(yōu)先使用java.nio.file(NIO.2),API 簡潔且效率高,核心類是Paths(路徑)和Files(操作);
  2. 小文件用readAllLines/write一次性處理,大文件用BufferedReader/BufferedWriter逐行處理;
  3. 所有文件操作必須處理 IO 異常,顯式指定 UTF-8 編碼,避免亂碼和兼容性問題。

掌握以上內(nèi)容,你就能應對 90% 的 Java 文件操作場景。如果需要處理二進制文件(如圖片、視頻)、文件復制 / 移動、文件屬性修改等進階操作,可在評論區(qū)留言,后續(xù)會補充對應的示例。

到此這篇關于Java程序操作文件及避坑指南的文章就介紹到這了,更多相關Java程序操作文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot整合Camunda工作流實踐

    SpringBoot整合Camunda工作流實踐

    工作流是任務序列的組織方式,BPMN是業(yè)務流程建模標準,Activiti、Flowable、Camunda均源自JBPM,通過分叉發(fā)展形成不同技術路線,支持多種數(shù)據(jù)庫,且可與SpringBoot集成部署流程
    2025-09-09
  • Java Thread多線程開發(fā)中Object類詳細講解

    Java Thread多線程開發(fā)中Object類詳細講解

    這篇文章主要介紹了Java Thread多線程開發(fā)中Object類,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-03-03
  • java并查集算法帶你領略熱血江湖

    java并查集算法帶你領略熱血江湖

    這篇文章主要為大家介紹了java并查集算法,以大家熱愛的方式,帶你領略熱血江湖中的并查集算法,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • IDEA實用好用插件推薦及使用方法教程詳解(必看)

    IDEA實用好用插件推薦及使用方法教程詳解(必看)

    這篇文章主要介紹了IDEA實用好用插件推薦及使用方法教程,本文通過實例截圖相結合給大家介紹的非常詳細,對大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • 從lombok的val和var到JDK的var關鍵字方式

    從lombok的val和var到JDK的var關鍵字方式

    這篇文章主要介紹了從lombok的val和var到JDK的var關鍵字方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 深入了解Java方法的重載與重寫

    深入了解Java方法的重載與重寫

    在最初學習java的時候,人們都知道,java這種面向?qū)ο蟮恼Z言,一共有三大特征,分別是:封裝、繼承、多態(tài)。多態(tài)的實現(xiàn)途徑有三種:重寫、重載、接口實現(xiàn)。本文就來為大家詳細講講Java方法的重載與重寫
    2022-07-07
  • Idea中如何調(diào)出Run dashboard 或services窗口

    Idea中如何調(diào)出Run dashboard 或services窗口

    這篇文章主要介紹了Idea中如何調(diào)出Run dashboard 或services窗口問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java如何生成登錄隨機驗證碼

    java如何生成登錄隨機驗證碼

    這篇文章主要為大家詳細介紹了java如何生成登錄隨機驗證碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • java代碼審計之目錄遍歷的解決

    java代碼審計之目錄遍歷的解決

    目錄穿越漏洞,也叫做目錄遍歷/路徑遍歷漏洞,本文主要介紹了java代碼審計之目錄遍歷的解決,文中通過案例介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-06-06
  • Mac下安裝配置Maven并在IDEA中配置的詳細教程

    Mac下安裝配置Maven并在IDEA中配置的詳細教程

    這篇文章主要介紹了Mac下安裝配置Maven并在IDEA中配置,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論

大方县| 台南市| 大安市| 镇康县| 德安县| 正蓝旗| 新蔡县| 双峰县| 剑阁县| 甘谷县| 平定县| 龙川县| 临泉县| 灌阳县| 黄陵县| 靖边县| 沙雅县| 南乐县| 新邵县| 河津市| 太仆寺旗| 城固县| 台北市| 弋阳县| 祁门县| 凤山市| 扎鲁特旗| 翁牛特旗| 娄烦县| 鲁山县| 弋阳县| 济源市| 息烽县| 巨鹿县| 山阳县| 揭阳市| 襄樊市| 衡阳县| 徐汇区| 荆门市| 唐河县|