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
タイトルとURLをコピーしました