Java | ファイルから読み込んだ配列を一部だけ書き出す例(IOと組み合わせる)

Java Java
スポンサーリンク

ここでは 「ファイル → ArrayList に読み込み → 一部だけ抜き出す(subList) → 別ファイルに書き出す」 という流れを、初心者向けにシンプルなコードで説明します。

Java の ArrayList では Arrays.copyOfRange の代わりに subList を使います。


実現すること(流れ)

  1. input.txt を読み込んで ArrayList に入れる
  2. subList(from, to) で一部だけ取り出す
  3. output.txt に書き出す

入力ファイル例(input.txt)

10
20
30
40
50
60

完成コード(ArrayList 版)

import java.util.*;
import java.io.*;
import java.nio.file.*;

public class ArrayListSlice {
    public static void main(String[] args) {
        try {
            // ① ファイルを読み込んで行ごとに List<String> を取得
            List<String> lines = Files.readAllLines(Paths.get("input.txt"));

            // ② String → Integer に変換して ArrayList に入れる
            ArrayList<Integer> list = new ArrayList<>();
            for (String line : lines) {
                list.add(Integer.parseInt(line));
            }

            // ③ subList で一部を取り出す(1〜3 → 20, 30, 40)
            // subList は元リストの view(参照)なので new ArrayList で独立コピー
            List<Integer> part = new ArrayList<>(list.subList(1, 4));

            // ④ 書き出し用に List<String> を作成
            List<String> outLines = new ArrayList<>();
            for (Integer n : part) {
                outLines.add(String.valueOf(n));
            }

            // ⑤ output.txt に書き出し
            Files.write(Paths.get("output.txt"), outLines);

            System.out.println("元のリスト      : " + list);
            System.out.println("抜き出したリスト: " + part);
            System.out.println("output.txt に書き出しました!");

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

subList の基本ルール(配列の copyOfRange とそっくり)

list.subList(from, to)

  • from は「含む(inclusive)」
  • to は「含まない(exclusive)」 ← ここ重要!
  • → 結果は list[from] ~ list[to-1]

例:list.subList(1, 4)

list = [10, 20, 30, 40, 50, 60]
             |   |   |
             v   v   v
subList(1,4) → [20, 30, 40]

超重要:subList は “リストの一部を参照するビュー”

subList の注意点:

  • 元のリストの一部を “参照” しているだけ
  • 元リストを変更すると subList 側も影響する
  • subList をそのまま保持したまま元リストを変更すると ConcurrentModificationException

そのため、初心者は必ずこうするのがおすすめ:

new ArrayList<>(list.subList(from, to))
Java

このコードでは 独立した別リスト を作っているので安全。


書き出される output.txt の中身

上の例では:

20
30
40

応用:範囲を変えるだけでいろいろできる

List<Integer> part1 = new ArrayList<>(list.subList(0, 3)); // 最初の3つ
List<Integer> part2 = new ArrayList<>(list.subList(2, list.size())); // 2以降全部
List<Integer> lastTwo = new ArrayList<>(list.subList(list.size() - 2, list.size()));
Java
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました