file.mkdir が false を返すのはなぜですか?
Google は、いくつかの理由 (セキュリティ、アクセス許可、パス名など) が考えられることを示しています。
私の質問:
- false を返す正確な理由を見つける方法は?
- セキュリティ/アクセス許可が理由である場合、SecurityException がスローされないのはなぜですか?
ディレクトリが既に存在する場合、mkdir と mkdirs は false を返すため、失敗の 1 つの理由である可能性があります。
Java 7 を使用している場合は、Files クラスを使用できます。エラーが発生すると、かなり適切な説明で IOException がスローされます。
Files.createDirectory(file.toPath());
セキュリティ/パーミッションが理由である場合、SecurityException がスローされないのはなぜですか (javadoc に記載されています)。
SecurityException
OS レベルではなく、何かを行うための JVM レベルのアクセス許可がない場合、Aがスローされます。
false を返す正確な理由を見つける方法はありますか?
いいえ、知る限り。知る唯一の方法は、ディレクトリのアクセス許可を自分で確認し、それらを呼び出す前に存在しないことを確認し、親ディレクトリが存在するかどうかを確認することです。
ただし、Java 7 以降を使用している場合は、代わりに NIO を使用してディレクトリを作成できます。具体的にはFiles.createDirectory
:
File dir = new File("mydir");
Files.createDirectory(dir.toPath());
を使用せずに NIO を完全に使用したい場合は、代わりにjava.io.File
を使用Paths.get
して作成できます。Path
Path dir = Paths.get("mydir");
Files.createDirectory(dir);
どちらの場合も、ディレクトリを作成できない場合はIOException
、操作が失敗した正確な理由とともに をスローします。
これは のほとんどのメソッドに当てはまるため、クラスFiles
のメソッドを使用するよりも使用することをお勧めします。File
いいえ、mkdirs()
おそらくOSに依存するため、少なくともJava内からではなく、正確な理由がfalseを返すことを見つける方法はありません。
およびメソッドにセキュリティ違反があるSecurityException
場合は、 がスローされます。OS のアクセス許可の問題がある場合、例外はスローされません。SecurityManager
checkRead()
checkWrite()
File.mkdir()
さらに、 を呼び出した場合、親ディレクトリが存在しない場合はmkdir()
false が返されることに注意してください。ただし、呼び出すFile.mkdirs()
と、存在しない親ディレクトリが作成されます。