Pathで場所を表す
Pathはファイルやフォルダーの場所を表します。相対パスは実行時の作業フォルダーを基準にします。
PathExample.javaJAVA
import java.nio.file.Path;
public class PathExample {
public static void main(String[] args) {
Path path = Path.of("data", "message.txt");
System.out.println(path);
System.out.println(path.toAbsolutePath());
}
}実行例OUTPUT
data/message.txt
/home/user/project/data/message.txt絶対パスは環境ごとに異なります。固定の文字列で区切り記号をつなげず、Path.of()を使います。
テキストを保存して読む
親フォルダーを作り、UTF-8で保存してから読み込みます。Java 18以降ではこれらのメソッドの既定文字コードもUTF-8ですが、意図を明確にするため指定します。
TextFile.javaJAVA
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
public class TextFile {
public static void main(String[] args) throws IOException {
Path path = Path.of("data", "message.txt");
Files.createDirectories(path.getParent());
Files.writeString(path, "Javaを勉強中です。\n", StandardCharsets.UTF_8);
String content = Files.readString(path, StandardCharsets.UTF_8);
System.out.print(content);
}
}実行結果OUTPUT
Javaを勉強中です。上書きに注意
writeString()は既存内容を置き換えます。重要なファイルではなく練習用フォルダーで試します。末尾へ追記する
StandardOpenOption.APPENDで既存内容の末尾へ加えます。ファイルがない場合にも作れるようCREATEを併用します。
追記JAVA
Files.writeString(
Path.of("data", "log.txt"),
"学習を開始しました。\n",
StandardCharsets.UTF_8,
StandardOpenOption.CREATE,
StandardOpenOption.APPEND
);
System.out.print(Files.readString(Path.of("data", "log.txt")));初回の実行結果OUTPUT
学習を開始しました。実行するたびに1行増えます。java.nio.file.StandardOpenOptionをインポートしてください。
CSVを読み込む
引用符や値内のカンマを含まない単純な練習用CSVなら、行ごとに読み、最初のカンマで分けられます。
products.csvCSV
りんご,120
みかん,80読込処理JAVA
for (String line : Files.readAllLines(Path.of("products.csv"))) {
String[] columns = line.split(",", 2);
String name = columns[0];
int price = Integer.parseInt(columns[1]);
System.out.println(name + ": " + price + "円");
}実行結果OUTPUT
りんご: 120円
みかん: 80円実務のCSV 値にカンマ、改行、引用符が入るCSVは単純な
split()では正しく読めません。検証済みのCSVライブラリを使い、列数や数値形式も確認します。ミニ課題:買い物メモ
商品名を1行ずつshopping.txtへ保存し、読み込んで番号付きで表示してください。ファイルがない初回は空の一覧として扱いましょう。
確認項目
Files.exists()で存在を確認する- UTF-8を明示する
- 既存ファイルを上書きするか追記するか決める
IOExceptionを呼び出し側へ渡すか処理する