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

Java ArrayList 寫入文本文件:BufferedWriter 高效實現

     編輯:程式設計綜合問答

標準實現

import java.io.*;
import java.util.ArrayList;

public class ArrayListToFile {
    public static void main(String[] args) throws IOException {
        ArrayList<String> list = new ArrayList<>();
        list.add("first");
        list.add("second");
        list.add("third");

        File file = new File("d:/output.txt");
        try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
            for (String line : list) {
                bw.write(line);
                bw.newLine();  // 跨平台換行
            }
        }
    }
}

進階:泛型工具方法

public static <T> void writeList(List<T> list, File file, Function<T, String> mapper) throws IOException {
    try (BufferedWriter bw = new BufferedWriter(new FileWriter(file))) {
        for (T item : list) {
            bw.write(mapper.apply(item));
            bw.newLine();
        }
    }
}

// 調用
writeList(list, new File("out.txt"), Object::toString);
writeList(userList, new File("users.txt"), u -> u.getName() + "," + u.getEmail());

大文件優化

  • 增大緩衝區:new BufferedWriter(new FileWriter(file), 64 * 1024)。
  • 異步寫入:Files.writeAsync(path, lines, StandardOpenOption.CREATE) (Java 11+)。
  • 分批 flush:每 1000 行 bw.flush(),平衡內存與磁盤 I/O。

編碼指定

// Java 10+
try (BufferedWriter bw = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { ... }

// Java 8
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"))) { ... }

常見錯誤

錯誤原因修正
中文亂碼未指定 UTF-8,系統默認 GBK显式指定 StandardCharsets.UTF_8
文件被佔用未關閉流 / 別的進程打開try-with-resources 自動關閉
最後一行無換行忘記 bw.newLine()循環內統一調用
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved