首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 文件創建與寫入完整指南:從基本操作到實戰封裝

     編輯:Java 綜合教學

Java 文件創建與寫入完整指南

在 Java 開發中,文件操作是基礎且高頻的需求。本文將系統講解如何創建文件、寫入內容、讀取數據以及刪除文件,並提供一個可直接用於生產環境的工具類封裝。

核心場景:大數據 JSON 本地緩存

項目中常遇到需通過 HTTP 請求獲取較大 JSON 數據(如 300KB 左右)並持久化保存的場景。為避免重複請求,將數據以文件形式落地,後續直接讀取本地文件即可,顯著提升響應速度並降低外部依賴風險。

關鍵 API 速覽

  • File:文件/目錄路徑抽象,提供創建、刪除、判斷存在等操作
  • FileOutputStream / FileInputStream:字節流,適合二進制數據
  • PrintWriter / BufferedReader:字符流包裝,支援按行讀寫、自動換行
  • try-with-resources (JDK 7+):自動關閉流資源,避免洩漏

實戰封裝:ForFile 工具類

下方代碼整合了創建、寫入(追加模式)、刪除三大核心功能,採用靜態方法設計,開箱即用:

package com.file.run;

import java.io.*;
import java.util.UUID;

public class ForFile {
    private static final String BASE_PATH = "D:\\file\\";

    /**
     * 創建文件並寫入初始內容
     * @param fileName 文件名(不含副檔名)
     * @param fileContent 初始內容
     * @return 是否創建成功
     */
    public static boolean createFile(String fileName, String fileContent) {
        String fullPath = BASE_PATH + fileName + ".txt";
        File file = new File(fullPath);
        try {
            if (!file.exists()) {
                boolean created = file.createNewFile();
                if (created) {
                    System.out.println("成功創建文件: " + fullPath);
                    writeFileContent(fullPath, fileContent);
                }
                return created;
            }
            return false; // 文件已存在
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 追加寫入內容(保留原有數據)
     * @param filePath 完整文件路徑
     * @param newStr 新增內容
     * @return 是否寫入成功
     */
    public static boolean writeFileContent(String filePath, String newStr) {
        File file = new File(filePath);
        String line = newStr + System.lineSeparator();
        StringBuilder buffer = new StringBuilder();

        // 讀取原有內容
        try (FileInputStream fis = new FileInputStream(file);
             InputStreamReader isr = new InputStreamReader(fis);
             BufferedReader br = new BufferedReader(isr)) {
            String temp;
            while ((temp = br.readLine()) != null) {
                buffer.append(temp).append(System.lineSeparator());
            }
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }

        buffer.append(line);

        // 寫入合併後內容
        try (FileOutputStream fos = new FileOutputStream(file);
             PrintWriter pw = new PrintWriter(fos)) {
            pw.write(buffer.toString());
            pw.flush();
            return true;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 刪除指定文件
     * @param fileName 文件名(不含副檔名)
     * @return 是否刪除成功
     */
    public static boolean delFile(String fileName) {
        String fullPath = BASE_PATH + fileName + ".txt";
        File file = new File(fullPath);
        if (file.exists()) {
            return file.delete();
        }
        return false;
    }

    // 測試入口
    public static void main(String[] args) {
        String uniqueName = UUID.randomUUID() + "myfile";
        String content = "我的夢說別停留等待,就讓光芒折射淚濕的瞳孔,映出心中最想擁有的彩虹";
        createFile(uniqueName, content);
    }
}

進階優化建議

  1. 路徑配置外部化:將 BASE_PATH 移至配置文件或環境變量
  2. 編碼顯式指定:使用 StandardCharsets.UTF_8 避免中文亂碼
  3. 大文件分塊處理:超過內存限制時改用 Files.write(..., StandardOpenOption.APPEND) 直接追加
  4. 線程安全:多線程寫入同一文件時加鎖或使用 FileLock

常見坑點提醒

  • File.createNewFile() 僅創建文件,不創建父目錄,需先 file.getParentFile().mkdirs()
  • Windows 路徑分隔符需轉義 \\ 或使用 File.separator
  • 流關閉順序:先開後關,包裝流關閉會自動關閉底層流

掌握這套模式,即可輕鬆應對日誌記錄、數據緩存、配置持久化等多數文件操作場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved