48

file.mkdir が false を返すのはなぜですか?

Google は、いくつかの理由 (セキュリティ、アクセス許可、パス名など) が考えられることを示しています。

私の質問:

  1. false を返す正確な理由を見つける方法は?
  2. セキュリティ/アクセス許可が理由である場合、SecurityException がスローされないのはなぜですか?
4

4 に答える 4

47

ディレクトリが既に存在する場合、mkdir と mkdirs は false を返すため、失敗の 1 つの理由である可能性があります。

Java 7 を使用している場合は、Files クラスを使用できます。エラーが発生すると、かなり適切な説明で IOException がスローされます。

Files.createDirectory(file.toPath());
于 2012-08-30T19:26:29.393 に答える
37

セキュリティ/パーミッションが理由である場合、SecurityException がスローされないのはなぜですか (javadoc に記載されています)。

SecurityExceptionOS レベルではなく、何かを行うための 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

于 2012-08-30T18:06:39.417 に答える
7
  1. いいえ、mkdirs()おそらくOSに依存するため、少なくともJava内からではなく、正確な理由がfalseを返すことを見つける方法はありません。

  2. およびメソッドにセキュリティ違反があるSecurityException場合は、 がスローされます。OS のアクセス許可の問題がある場合、例外はスローされません。SecurityManagercheckRead()checkWrite()


File.mkdir()さらに、 を呼び出した場合、親ディレクトリが存在しない場合はmkdir()false が返されることに注意してください。ただし、呼び出すFile.mkdirs()と、存在しない親ディレクトリが作成されます。

于 2012-08-30T18:06:44.957 に答える