Java7触ってみる(2) 削除済みファイルの読み書き
もしかしてできるようになっているのではと思ったらできるようになっていた喜ばしい。6まででやる方法あったんだろか? TrueZIPとか使えばできるかもしれない。
package org.hogel.NioTest; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.Writer; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import org.junit.Test; public class NioTest { /** * 通るテスト */ @Test public void 削除済みのファイルへの読み書き_nio() throws Exception { Path path = Paths.get("tmp"); try (BufferedWriter writer = Files.newBufferedWriter(path, Charset.defaultCharset(), StandardOpenOption.CREATE)) { try (BufferedReader reader = Files.newBufferedReader(path, Charset.defaultCharset())) { writer.write("ほげ"); assertThat(Files.deleteIfExists(path), is(true)); assertThat(Files.exists(path), is(false)); writer.write("ふが"); writer.flush(); String line = reader.readLine(); assertThat(line, is("ほげふが")); } } } /** * 通らないテスト */ @Test public void 削除済みのファイルへの読み書き_legacy() throws Exception { File file = new File("tmp"); try (Writer writer = new FileWriter(file)) { try (BufferedReader reader = new BufferedReader(new FileReader(file))) { writer.write("ほげ"); assertThat(file.delete(), is(true)); // ここで失敗する assertThat(file.exists(), is(false)); writer.write("ふが"); writer.flush(); String line = reader.readLine(); assertThat(line, is("ほげふが")); } } } }