ここでは Java 8 “以下” で書けるように、Files.readAllLines や Files.write を使わずに実装したバージョン を示します。
つまり、BufferedReader / PrintWriter を使ってファイル I/O を行う古典的な書き方です。
やること(Java 8 以下版)
BufferedReaderでinput.txtを読む- 1行ずつ ArrayList に入れる
subList(from, to)で一部を取り出してArrayListにコピーPrintWriterでoutput.txtに書き出す
完成コード(Java 8 以下対応)
import java.util.*;
import java.io.*;
public class ArrayListStringSliceOldIO {
public static void main(String[] args) {
BufferedReader br = null;
PrintWriter pw = null;
try {
// ① BufferedReader でファイル読み込み
br = new BufferedReader(new FileReader("input.txt"));
// ② ArrayList<String> に行ごとに追加
ArrayList<String> list = new ArrayList<>();
String line;
while ((line = br.readLine()) != null) {
list.add(line);
}
// ③ subList で一部だけ取り出す(例:1〜3)
List<String> part = new ArrayList<>(list.subList(1, 4));
// ④ PrintWriter でファイルに書き出し
pw = new PrintWriter(new FileWriter("output.txt"));
for (String s : part) {
pw.println(s);
}
System.out.println("元のリスト : " + list);
System.out.println("抜き出したリスト: " + part);
System.out.println("output.txt に書き出しました!");
} catch (Exception e) {
e.printStackTrace();
} finally {
// ⑤ close(Java 7 以前は try-with-resources が使えない想定で手動 close)
try {
if (br != null) br.close();
if (pw != null) pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Java動作説明(初心者向け)
BufferedReader + FileReader
古いバージョンほどよく使う組み合わせ:
BufferedReader br = new BufferedReader(new FileReader("input.txt"));
Java1 行ずつ読むときの定番です。
ArrayList に読み込む
while ((line = br.readLine()) != null) {
list.add(line);
}
Java行がなくなるまで読み続ける。
subList(配列の部分抜き出しと同じ仕組み)
list.subList(1, 4)
Javaは インデックス 1〜3 の3行
(to は “含まない” のがポイント)
PrintWriter で書き込み
pw = new PrintWriter(new FileWriter("output.txt"));
pw.println(s);
Javaprintln で行単位で書き出せるので簡単。
finally で close
Java 6〜7 以前のコードに近い形で手動で閉じる必要があります。
出力ファイル(output.txt)
もし input.txt が:
apple
banana
cherry
orange
grape
melon
なら、
subList(1,4) の結果:
banana
cherry
orange
が output.txt に書き出されます。
