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

Java Java
スポンサーリンク

ここでは 「ファイル → ArrayList に読み込み → subList で一部だけ抜き出す → 別ファイルへ書き出す」 という流れを、初心者向けにわかりやすくまとめます。


今回のゴール(文字列版)

  1. input.txt の内容を ArrayList に読み込む
  2. subList(from, to) を使って一部だけ取り出す
  3. output.txt に書き出す

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

apple
banana
cherry
orange
grape
melon

完成コード(ArrayList 版)

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

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

            // ② ArrayList<String> に変換(可変リストにしたいので)
            ArrayList<String> list = new ArrayList<>(lines);

            // ③ subList で一部を取り出す(1〜4 → banana, cherry, orange)
            // subList は view なので安全のため ArrayList へコピー
            List<String> part = new ArrayList<>(list.subList(1, 4));

            // ④ output.txt に書き出す
            Files.write(Paths.get("output.txt"), part);

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

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

出力ファイル(output.txt)

上の例では subList(1,4) なので:

banana
cherry
orange

が書き出されます。


subList のルール(配列と同じ)

list.subList(from, to) は:

  • from → 含む (inclusive)
  • to → 含まない (exclusive)

例:

[apple, banana, cherry, orange, grape, melon]
       |        |       |
       v        v       v
subList(1,4) → [banana, cherry, orange]

subList の注意(必ず知っておくべきポイント)

subList()元のリストの一部を参照するだけのビュー

そのため、こういうことが起こります:

  • 元のリストを変更すると subList も変わる
  • subList を保持したまま元リストを変更すると ConcurrentModificationException

初心者は必ず new ArrayList<>(subList) で独立コピーするのが安全!

本コードでもこの方法を採用:

List<String> part = new ArrayList<>(list.subList(1, 4));
Java

応用例:範囲を変えるだけですぐ使える

最初の3行を抜き出す

List<String> head = new ArrayList<>(list.subList(0, 3));
Java

最後の2行を抜き出す

List<String> last2 = new ArrayList<>(list.subList(list.size() - 2, list.size()));
Java

中央の部分だけ抜き出す

List<String> mid = new ArrayList<>(list.subList(2, 5));
Java
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました