#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);