В пакете java.io нет класса Directory
, но вы можете использовать метод mkdir()
в классе File
:
(new File("Foo")).mkdir()
Обратите внимание, что mkdir()
имеет два отдельных режима отказа:
- «Если менеджер безопасности существует, а его метод
checkWrite()
не разрешает создание именованного каталога», то будет выдан SecurityException
.
- Если операция завершится неудачей по другой причине,
mkdir()
вернет false. (Более конкретно, он вернет true тогда и только тогда, когда каталог был создан.)
Точка 1 в порядке - если у вас нет разрешения, бросьте. Точка 2 немного неоптимальна по трем причинам:
- Вам нужно проверить логический результат этого метода. Если вы проигнорируете результат, операция может завершиться сбоем.
- Если вы получили ложное возвращение, вы не понимаете, почему операция завершилась неудачно, что затрудняет восстановление, или формулирует осмысленное сообщение об ошибке.
- Строгая формулировка контракта «тогда и только тогда» также означает, что метод возвращает false, если каталог уже существует.
В сторону: Контраст 3 с
поведение .NET
Directory.CreateDirectory()
который
ничего не делает, если каталог существует.
Этот вид имеет смысл - "создать
каталог ";" хорошо, каталог
создано ". Имеет ли значение, если это было
создан сейчас или раньше; этим
процесс или другой? Если ты действительно
заботился о том, что вы не спросите другой
вопрос: «Существует ли этот каталог?»
Следующее предостережение заключается в том, что mkdir()
не будет создавать более одного каталога за раз. Для моего простого примера каталога с именем "Foo" это хорошо; однако, если вы хотите создать каталог с именем Bar в каталоге Foo (то есть для создания каталога "Foo / Bar"), вы должны помнить, что вместо этого следует использовать метод mkdirs()
.
Таким образом, чтобы обойти все эти предостережения, вы можете использовать вспомогательный метод, такой как следующий:
public static File createDirectory(String directoryPath) throws IOException {
File dir = new File(directoryPath);
if (dir.exists()) {
return dir;
}
if (dir.mkdirs()) {
return dir;
}
throw new IOException("Failed to create directory '" + dir.getAbsolutePath() + "' for an unknown reason.");
}