なぜfile.mkdirはfalseを返すのですか?File.mkdirまたはmkdirsはfalseを返す - 理由?
Googleはいくつかの理由(例えば、セキュリティ、権限、パス名など)があるかもしれないことを示しています。
私の質問:
- falseを返すの正確な理由を見つけるためにどのように?
- セキュリティ/アクセス権が理由であれば、なぜSecurityExceptionがスローされませんか?
なぜfile.mkdirはfalseを返すのですか?File.mkdirまたはmkdirsはfalseを返す - 理由?
Googleはいくつかの理由(例えば、セキュリティ、権限、パス名など)があるかもしれないことを示しています。
私の質問:
セキュリティ/アクセス権の場合は、(のjavadocに記載されている)理由、なぜに、SecurityExceptionがスローされないのですか?
SecurityException
は、あなたが何かではなく、OSレベル
なぜfalseを返すの正確な理由を見つける方法はありますを行うにはJVMレベルの権限を持っていない場合にスローされますか?
いいえ、私の知る限り。あなたが知っている唯一の方法は、ディレクトリのアクセス権を自分で確認し、呼び出す前に存在しないことを確認し、親ディレクトリが存在するかどうかを確認することです。
Java 7以上の場合は、代わりにNIOを使用してディレクトリを作成できます。ディレクトリができない場合、いずれの場合も
Path dir = Paths.get("mydir");
Files.createDirectory(dir);
:具体的には、Files.createDirectory
:あなたは完全にjava.io.File
を使用してNIOを使用したい場合は
File dir = new File("mydir");
Files.createDirectory(dir.toPath());
、あなたはPath
代わりを作成するためにPaths.get
を使用することができます操作が失敗した理由と同じ理由でIOException
がスローされます。
これはFiles
のほとんどのメソッドに当てはまります。したがって、File
クラスのメソッドを使用するよりも使用することをお勧めします。それはおそらくOS依存なよう
はありません、少なくともではないJavaの中から、mkdirs()
はfalseを返します正確な理由を見つける方法はありません。 SecurityManager
のcheckRead()
とcheckWrite()
方法でセキュリティ違反があった場合に
SecurityException
がスローされます。 OSのアクセス権の問題がある場合、例外はスローされません。
また、あなたがFile.mkdir()
を呼び出して、親ディレクトリが存在しない場合、mkdir()
はfalseを返すことに注意してください。ただし、File.mkdirs()
を呼び出すと、存在しない親ディレクトリが作成されます。
mkdirとmkdirsは、ディレクトリがすでに存在する場合はfalseを返します。そのため、障害の原因の1つになる可能性があります。
Java 7を使用している場合は、Filesクラスを使用できます。それはかなり良い記述でエラーでIOExceptionをスローします。
Files.createDirectory(file.toPath());
ディレクトリが既に存在する場合、またはディレクトリの作成中にエラーが発生した場合は、falseを返します。今、役に立つAPIがあります。 –
"mkdir"では、mkdir( "/ path1/path2 /")にしようとしています。コマンドを実行する前にpath1(親)フォルダが存在しない場合、mkdirは失敗し、既存のフォルダ内に新しいフォルダを作成できます。mkdirsはpath1とpath2のすべてのフォルダを作成できます。私はmkdirの失敗には手がかりがありません。助けてほしいと思っています。 – Andiana
@Andiana Correct。これは、Javaの 'File.mkdir'がWindowsの規則ではなくLinuxの規則に従い、中間のディレクトリを作成しないためです。 'File.mkdirs'はWindowsの規則に従い、Linuxでは' mkdir --parents'のように動作します。いい視点ね。それでも、正確な理由を得るために、以下のマイケルの答えが最善のものです:JavaのNIOパッケージを使用してください。 – Brian