File.mkdir or mkdirs return false - Reason?
If security/permissions is a reason, then why is SecurityException NOT thrown (which is mentioned in javadoc)?
A SecurityException
is thrown when you don't have JVM-level permission to do something, not OS-level
Is there a way to find the exact reason why of returning false?
No, AFAIK. The only way to know would be to check the permissions on the directory yourself, make sure it doesn't exist before calling them, check if the parent directory exists, etc.
However, if you're using Java 7 or higher, you can use NIO instead to create the directory. Specifically, Files.createDirectory
:
File dir = new File("mydir");
Files.createDirectory(dir.toPath());
If you want to use NIO entirely without using java.io.File
, you can use Paths.get
to create a Path
instead:
Path dir = Paths.get("mydir");
Files.createDirectory(dir);
In both cases, if the directory can't be created, it will throw an IOException
with an exact reason for why the operation failed.
This is true for most of the methods in Files
, and so using it is recommended over using the methods in the File
class.
No, there's no way to find the exact reason
mkdirs()
returns false, at least not from within Java, as it would probably be OS dependent.A
SecurityException
is thrown if there is a security violation in theSecurityManager
'scheckRead()
andcheckWrite()
methods. The exception isn't thrown if there is an OS permissions issue.
Additionally, note that if you call File.mkdir()
, and the parent directory doesn't exist, mkdir()
will return false. However, calling File.mkdirs()
will create the non-existent parent directories.
mkdir and mkdirs return false if the directory already exists, so that might be one reason for the failure.
If you are using Java 7, you can use the Files class. It throws an IOException on error with pretty good descriptions.
Files.createDirectory(file.toPath());