Существует ли путь в Java, чтобы определить, допустим ли путь, не пытаясь создать файл?

66
задан Matthias Braun 1 May 2019 в 14:07
поделиться

3 ответа

Это проверило бы на существование каталога также.

File file = new File("c:\\cygwin\\cygwin.bat");
if (!file.isDirectory())
   file = file.getParentFile();
if (file.exists()){
    ...
}

кажется, что file.canWrite () не дает Вам ясный признак, если у Вас есть полномочия записать в каталог.

31
ответ дан krosenvold 24 November 2019 в 15:05
поделиться

File.getCanonicalPath() довольно полезно с этой целью. Исключения IO выдаются для определенных типов недопустимых имен файлов (например, CON, PRN, *?* в Windows) при разрешении против ОС или файловой системы. Однако это только служит предварительной проверкой; необходимо будет все еще обработать другие отказы, на самом деле создавая файл (например, недостаточные полномочия, отсутствие дискового пространства, ограничений безопасности).

17
ответ дан Zach Scrivena 24 November 2019 в 15:05
поделиться

Много вещей могут пойти не так, как надо, когда Вы пытаетесь создать файл:

  • Ваше отсутствие необходимые полномочия;
  • на устройстве существует недостаточно пространства;
  • устройство сталкивается с ошибкой;
  • Некоторая политика пользовательской безопасности мешает Вам создавать файл конкретного типа;
  • и т.д.

Главное, те могут измениться между тем, когда Вы пытаетесь запросить, чтобы видеть, можете ли Вы и когда Вы на самом деле можете. В многопоточной среде это - одна из основных причин условий состязания и может быть реальной уязвимостью некоторых программ.

В основном просто необходимо попытаться создать его и видеть, работает ли это. И это - корректный способ сделать это. Это - почему вещи как ConcurrentHashMap имеют putIfAbsent() так проверка, и вставка является атомарной операцией и не страдает от условий состязания. Точно тот же принцип находится в игре здесь.

, Если это - просто часть некоторой диагностики или процесса установки, просто сделайте это и посмотрите, работает ли это. Снова нет никакой гарантии, что это будет работать позже как бы то ни было.

В основном Ваша программа должна быть достаточно устойчивой для смерти корректно, если она не может записать соответствующий файл.

15
ответ дан cletus 24 November 2019 в 15:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: