Java java.nio.file.Files deleteIfExists() メソッド
java.nio.file.Files.deleteIfExists()Java NIO (New Input/Output) パッケージの実用のなメソッドで、ファイルシステム内のファイルまたは空のディレクトリを削除するために使用されます。delete()メソッドとは異なり、deleteIfExists()ファイルが存在しない場合は例外をスローせず、代わりに戻り値を返しますfalse。
メソッド構文
public static boolean deleteIfExists(Path path) throws IOException
パラメータの説明
path:削除するファイルまたはディレクトリのパス(Pathオブジェクト)
戻り値
true:ファイルが存在し、正常に削除された場合false:ファイルが存在しない場合
例外
IOException:I/O エラーが発生した場合SecurityException:セキュリティマネージャーが存在し、削除アクセスを拒否した場合
使用シーン
deleteIfExists()このメソッドは特に以下のシーンに適しています:
- ファイルの存在に関わらず、安全にファイルを削除する必要がある場合
- ファイルが存在しないために例外がスローされることを望まない場合
- ファイルが実際に削除されたかどうかを(戻り値を通じて)確認する必要がある場合
サンプルコード
基本的な使い方
例
import java.nio.file.*;
public class DeleteFileExample {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try {
boolean deleted = Files.deleteIfExists(path);
if (deleted) {
System.out.println("ファイルの削除に成功しました");
} else {
System.out.println(ファイルが存在しないため、削除は不要です);
}
} catch (IOException e) {
System.err.println("ファイル削除中にエラーが発生しました: " + e.getMessage());
}
}
}
public class DeleteFileExample {
public static void main(String[] args) {
Path path = Paths.get("example.txt");
try {
boolean deleted = Files.deleteIfExists(path);
if (deleted) {
System.out.println("ファイルの削除に成功しました");
} else {
System.out.println(ファイルが存在しないため、削除は不要です);
}
} catch (IOException e) {
System.err.println("ファイル削除中にエラーが発生しました: " + e.getMessage());
}
}
}
ディレクトリの削除(空のディレクトリである必要があります)
例
Path dirPath = Paths.get("empty_directory");
try {
boolean deleted = Files.deleteIfExists(dirPath);
// 結果の処理...
} catch (DirectoryNotEmptyException e) {
System.err.println("ディレクトリが空ではないため、削除できません");
} catch (IOException e) {
System.err.println("その他の I/O エラー: " + e.getMessage());
}
try {
boolean deleted = Files.deleteIfExists(dirPath);
// 結果の処理...
} catch (DirectoryNotEmptyException e) {
System.err.println("ディレクトリが空ではないため、削除できません");
} catch (IOException e) {
System.err.println("その他の I/O エラー: " + e.getMessage());
}
注意事項
- ディレクトリ削除の制限:空のディレクトリのみ削除できます。ディレクトリが空でない場合は例外がスローされます
DirectoryNotEmptyException - シンボリックリンク:シンボリックリンクを削除する場合、リンク自体のみが削除され、ターゲットファイルには影響しません
- ファイルロック:ファイルが他のプロセスによってロックされている場合、削除操作は失敗する可能性があります
- 権限の問題:ファイルを削除するには十分な権限が必要です
他のメソッドとの比較
| メソッド | ファイルが存在しない場合の動作 | 戻り値 |
|---|---|---|
Files.deleteIfExists() |
false を返す | boolean |
Files.delete() |
NoSuchFileException をスローする | void |
File.delete()(従来の IO) |
false を返す | boolean |
ベストプラクティス
- 操作が成功したかどうかを把握するために、常に戻り値を確認する
- スローされる可能性のある IOException を適切に処理する
- ディレクトリを削除する場合は、事前にディレクトリが空であることを確認する
- 関連リソースの処理には try-with-resources の使用を検討する
例
try {
if (Files.deleteIfExists(path)) {
// ファイルが存在し、削除された
} else {
// ファイルが存在しない
}
} catch (IOException e) {
// 例外を処理
}
if (Files.deleteIfExists(path)) {
// ファイルが存在し、削除された
} else {
// ファイルが存在しない
}
} catch (IOException e) {
// 例外を処理
}
まとめ
Files.deleteIfExists()安全かつ便利なファイル削除方法を提供し、特にファイルが存在するかどうか定かではないが削除が必要なシーンに適しています。従来のFile.delete()メソッドと比較して、より豊富な例外情報と、より柔軟な NIO パス処理機能を提供します。
Java java.nio.file.Files