Java | 配列の要素をファイルに書き出す/読み込む

Java Java
スポンサーリンク

「配列の要素をファイルに書き出す/読み込む」プログラミング初心者向けに、できるだけかみ砕いて、丁寧に解説します。
実用的な 完全コードつき(保存 → 読み込み)、さらに 応用例(2D 配列・CSV) まで載せています。


まず最初に ― Java のファイル読み書きの基本

Java ではファイルに文字を書き込む/読み込むのに次のクラスを使います:

書き出し(保存):

  • FileWriter(文字を書き込む)
  • BufferedWriter(高速化・便利)

読み込み:

  • FileReader
  • BufferedReader

⚠ 整数の配列でも、ファイルに保存するときは 文字列として書き込む のが簡単です。


例1:1次元配列(int[])をファイルに書き出す/読み込む

ステップ1:配列 → ファイルに保存(書き出し)

次の配列を保存してみます:

int[] nums = {10, 20, 30, 40, 50};
Java

書き出しコード(完全版)

import java.io.*;

public class WriteArrayExample {
    public static void main(String[] args) {
        int[] nums = {10, 20, 30, 40, 50};
        String filename = "numbers.txt";

        try (BufferedWriter bw = new BufferedWriter(new FileWriter(filename))) {

            for (int i = 0; i < nums.length; i++) {
                bw.write(Integer.toString(nums[i]));  // 整数 → 文字列へ
                bw.newLine(); // 改行
            }

            System.out.println("ファイルに書き出しました:" + filename);

        } catch (IOException e) {
            System.out.println("エラーが発生しました");
            e.printStackTrace();
        }
    }
}
Java

📄 出力されるファイル(numbers.txt)の中身:

10
20
30
40
50

ステップ2:ファイル → 配列に読み込む

読み込みコード(完全版)

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

public class ReadArrayExample {
    public static void main(String[] args) {
        String filename = "numbers.txt";
        List<Integer> list = new ArrayList<>();

        try (BufferedReader br = new BufferedReader(new FileReader(filename))) {

            String line;
            while ((line = br.readLine()) != null) {
                list.add(Integer.parseInt(line)); // 文字列 → 整数へ
            }

        } catch (IOException e) {
            System.out.println("読み込み中にエラーが発生しました");
            e.printStackTrace();
        }

        // List → 配列
        int[] nums = list.stream().mapToInt(i -> i).toArray();

        // 動作確認
        System.out.println("読み込んだ配列:");
        for (int n : nums) {
            System.out.println(n);
        }
    }
}
Java

📌 ポイント

  • ファイルは1行ずつ読む (readLine())
  • 読んだ文字列を Integer.parseInt() で数値に戻す
  • 要素数が未知なので、一旦 ArrayList に入れてから配列へ

例2:2次元配列(int[][])を CSV 形式で保存 → 読み込み

CSV(カンマ区切り)にすると、2D 配列も保存しやすく、Excel にも読めるので実用的です。

例として:

int[][] data = {
    {1, 2, 3},
    {10, 20, 30},
    {100, 200, 300}
};
Java

書き出し(CSV)

1,2,3
10,20,30
100,200,300

こんな感じで1行ずつ書く。

書き出しコード

import java.io.*;

public class Write2DArrayCSV {
    public static void main(String[] args) {
        int[][] data = {
            {1, 2, 3},
            {10, 20, 30},
            {100, 200, 300}
        };

        try (BufferedWriter bw = new BufferedWriter(new FileWriter("data.csv"))) {

            for (int i = 0; i < data.length; i++) {
                for (int j = 0; j < data[i].length; j++) {
                    bw.write(Integer.toString(data[i][j]));

                    if (j < data[i].length - 1) {
                        bw.write(",");   // 区切り
                    }
                }
                bw.newLine(); // 行の終わり
            }

            System.out.println("CSV を書き出しました");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Java

読み込み(CSV → 2D 配列)

読み込みコード

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

public class Read2DArrayCSV {
    public static void main(String[] args) {
        List<int[]> rows = new ArrayList<>();

        try (BufferedReader br = new BufferedReader(new FileReader("data.csv"))) {

            String line;
            while ((line = br.readLine()) != null) {
                String[] parts = line.split(",");  // カンマで分割
                int[] row = new int[parts.length];

                for (int i = 0; i < parts.length; i++) {
                    row[i] = Integer.parseInt(parts[i]);
                }

                rows.add(row);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

        // List<int[]> → int[][]
        int[][] data = rows.toArray(new int[0][]);

        // 動作確認
        System.out.println("読み込んだ2D配列:");
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                System.out.print(data[i][j] + " ");
            }
            System.out.println();
        }
    }
}
Java

ここまでの注意ポイント(初心者がはまりやすい)

1. Write / Read は try-with-resources を使う:

try (・・・) { } にすると自動でファイルを閉じてくれるので安全。

2. 数値は文字として保存される:

ファイルは基本的に「文字の集まり」。
→ 保存するときは Integer.toString()
→ 読むときは Integer.parseInt() が必要。

3. 改行は非常に重要:

1行が1つの値、または1つの行データを意味する。
bw.newLine() を忘れるとすべて1行になってしまう。

4. 数が何個あるか分からないとき:

  • いったん List に入れて → 配列に変換する
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました