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

Java Java
スポンサーリンク

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


実現すること(流れ)

  1. input.txt を読み込む
  2. 1行ずつ数値として配列に入れる
  3. 配列の一部を Arrays.copyOfRange で取り出す
  4. output.txt に書き出す

事前準備(入力ファイルの例)

input.txt(同じディレクトリに置く)

10
20
30
40
50
60

完成コード(最もシンプル版)

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

public class ReadSliceWrite {
    public static void main(String[] args) {
        try {
            // ① ファイルから行単位で読み込み(List<String>)
            List<String> lines = Files.readAllLines(Paths.get("input.txt"));

            // ② 数値(int)の配列に変換
            int[] nums = lines.stream()
                    .mapToInt(Integer::parseInt)
                    .toArray();

            // ③ 例:nums[1] 〜 nums[4](20,30,40)を取り出す
            int[] part = Arrays.copyOfRange(nums, 1, 4);

            // ④ 書き出すために文字列に変換
            List<String> outLines = new ArrayList<>();
            for (int n : part) {
                outLines.add(String.valueOf(n));
            }

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

            System.out.println("処理が完了しました!");
            System.out.println("元の配列        : " + Arrays.toString(nums));
            System.out.println("抽出した部分配列: " + Arrays.toString(part));

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

出力ファイル(output.txt)

この例では:

int[] part = Arrays.copyOfRange(nums, 1, 4);
Java

なので、nums[1]〜nums[3](20, 30, 40)だけ抜き出される。

output.txt には:

20
30
40

と書き込まれます。


何が起きているか図で理解

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

初心者ポイント解説

Files.readAllLines

  • ファイルの内容を行ごとの List で返す。
  • Stream化→ mapToInt(Integer::parseInt)int[] に変換できる。

Arrays.copyOfRange(nums, from, to)

  • from は「含む」
  • to は「含まない」
  • だから 1〜4 と書くと 1,2,3 の3つが取れる。

Files.write

  • List<String> を書き込むと、そのまま行単位でファイルに書かれる。

応用(簡単に変えられる項目)

次のように変えたい場合は、該当行を変えればOKです:

抜き出す範囲を変えたい

int[] part = Arrays.copyOfRange(nums, 2, 5); // 30,40,50
Java

別のファイル名で書き出したい

Files.write(Paths.get("slice_output.txt"), outLines);
Java

文字列配列なら?

パース不要なのでさらに簡単になります。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました