ここでは 「ファイル → 配列に読み込み → 一部だけ抜き出す(copyOfRange) → 別ファイルに書き出す」 という初心者向けの流れを、できるだけシンプルなコードで丁寧に説明します。
実現すること(流れ)
input.txtを読み込む- 1行ずつ数値として配列に入れる
- 配列の一部を
Arrays.copyOfRangeで取り出す 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文字列配列なら?
パース不要なのでさらに簡単になります。
