Java не может создать файл, если администратор даже с разрешениями, установленными для всех

#java #windows #file #filesystems #user-permissions

#java #Windows #файл #файловые системы #пользователь-разрешения

Вопрос:

Итак, я работаю над приложением Java, которое выполняет некоторые операции с файлами, приложение работает только при запуске с правами администратора, проблема в том, что приложение должно использоваться на куче машин клиентами, которые не имеют (и не должны) иметь учетные данные администратора.

 try (InputStream in = url.openStream()) {

            Files.copy(in, Paths.get("allDocs.zip"), StandardCopyOption.REPLACE_EXISTING);

        }
  

Для файлов создается исключение.скопируйте строку: java.nio.file.Исключение AccessDeniedException: allDocs.zip

Дело в том, что я попытался поместить файлы в общую папку, в домашнюю папку пользователя, в AppData, в каталог установки приложения, в папку, для которой я установил, что каждый пользователь имеет полный контроль… Я всегда получаю java.nio.file.Исключение AccessDeniedException, если я не запускаю программу с учетной записью администратора. Почему это происходит? Если у пользователя, который запускает процесс Java, есть разрешения на запись, почему процесс Java не может? Заранее спасибо

Комментарии:

1. Вы уверены, что записываете файл в общедоступном, user.home, AppData и т. Д.? Ваш код просто помещает файл в текущий каталог.

2. @VGR да, я уверен, потому что, если я запускаю его как администратор, файлы создаются в этих местах

3. Вы проверили разрешения для файла?

4. @VGR на самом деле вы были правы. Опубликуйте это как ответ, если хотите. Спасибо за помощь.

5. Для дальнейшего использования Process Monitor (доступен на веб-сайте MS) полезен для устранения неполадок такого рода.

Ответ №1:

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

 String home = System.getProperty("user.home");
Files.copy(in, Paths.get(home, "allDocs.zip"), StandardCopyOption.REPLACE_EXISTING);