Пакет java.io не имеет Directory
класс, но вы можете использовать метод mkdir()
на File
класса вместо:
(new File("Foo")).mkdir()
Обратите внимание, что mkdir()
имеет два отдельных режима отказа:
- «Если существует менеджер безопасности и его метод
checkWrite()
не разрешает создание именованного каталога», то будет выброшен SecurityException
.
- Если операция не выполнена по другой причине,
mkdir()
вернет значение false. (Более конкретно, он будет возвращать истинное тогда и только тогда, когда был создан каталог.)
Пункт 1 в порядке - если у вас нет разрешения, бросать. Точка 2 немного субоптимальна по трем причинам:
- Вам необходимо проверить логический результат этого метода. Если вы проигнорируете результат, операция может выйти из строя.
- Если вы получили ложное возвращение, вы не знаете, почему операция не удалась, что затрудняет восстановление или сформулировать значимое сообщение об ошибке.
- Строгая формулировка контракта «если и только если» также означает, что метод возвращает false, если каталог уже существует.
Помимо: Contrast точка 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.");
}
Вы задали вопрос и сразу же отправили свой собственный ответ? – KLE
-1. Кажется очень странным, чтобы задать вопрос и ответить. Переполнение стека не является микрофоном для вас, чтобы читать лекции. –
+1. Является хорошим, чтобы опубликовать свой собственный вопрос и ответ. Помогает сообществу и полезен для дальнейшего использования. Если люди не согласны с вашим ответом, тогда они могут обеспечить лучший. Быстрый поиск * на Meta SO, похоже, согласен с тем, что это нормально. – Iain