Edited at

java.nio.file.Filesでファイルを書いたり読んだり。

More than 1 year has passed since last update.

ふとjava.nio.file.Filesを試してみたくなったので、書いたり読んだりしてみました。

特に意味のないコードですが、せっかくなのでメモがてら晒しておきます。

doc

 https://docs.oracle.com/javase/jp/8/docs/api/java/nio/file/Files.html

import java.io.BufferedReader;

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;

public class OpenFileService {

private String dir = "src/main/resources/sample";
private String filename = "test.txt";

void FilesSample() {

try {
// ディレクトリが存在するか確認、存在しない場合は作成
if (!Files.isDirectory(Paths.get(dir))) {
System.out.println("ディレクトリなし");
Files.createDirectory(Paths.get(dir));
} else {
System.out.println("ディレクトリあり");
}

// ファイルが存在するかの確認、存在しない場合は作成
if (!Files.exists(Paths.get(dir, filename))) {
System.out.println("ファイルなし");
Files.createFile(Paths.get(dir, filename));
} else {
System.out.println("ファイルあり");
}

List<String> listA = new ArrayList<>();
listA.add("あいうえお");
listA.add("かきくけこ");
listA.add("さしすせそ");

// ファイルに追記書き込み
// Files.write(Paths.get(dir, filename), listA,
// Charset.forName("UTF-8"), StandardOpenOption.APPEND);
// ファイルに書き込み
Files.write(Paths.get(dir, filename), listA,
Charset.forName("UTF-8"), StandardOpenOption.WRITE);

// ファイルの全行読み込み。
// 読み込み完了または例外が発生した場合、ファイルはクローズされるためクローズの記述不要。
List<String> line = Files.readAllLines(Paths.get(dir, filename),
Charset.forName("UTF-8"));

// 読み込んだ文字をコンソールに出力
for (String s : line) {
System.out.println(String.format("Files:%s", s));
}

String brLine;
try (BufferedReader br = Files.newBufferedReader(
Paths.get(dir, filename), StandardCharsets.UTF_8)) {
while ((brLine = br.readLine()) != null) {
System.out.println(String.format("brLine:%s", brLine));
}
}
;

try (Stream<String> stream = Files.lines(Paths.get(dir, filename),
StandardCharsets.UTF_8)) {
stream.forEach(streamLine -> {
System.out.println(String.format("Stream:%s", streamLine));
});
}

} catch (IOException e) {
e.printStackTrace();
}
}
}

もう今の時代、あの長ったらしい書き方はしなくても良くなったんですね。