(Accès refusé) Доступ запрещен, исключение

Я получаю доступ к файлу из Java-приложения, но получаю следующее исключение

c:\Program Files\sample\sample\cample.xml (Acc?s refus?)        
at java.io.FileOutputStream.(Unknown Source)  
at java.io.FileOutputStream.  
at java.awt.event.InvocationEvent.dispatch(Unknown Source)  
at java.awt.EventQueue.dispatchEvent(Unknown Source)    
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)  
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)  
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)  
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)  
at java.awt.EventDispatchThread.run(Unknown Source)

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


person raji    schedule 23.08.2010    source источник
comment
файл не имеет разрешения на чтение. ›› это будет разрешение запись, потому что FileOutputStream означает: вывод, следовательно, запись.   -  person Abel    schedule 23.08.2010


Ответы (2)


С моим ограниченным знанием французского, я думаю: "Acc? S refus?" есть ли в вашей системе "Accès refusé?" или что-то подобное. Что означает: «доступ запрещен». Другими словами, вашей программе на Java не разрешено переходить в указанное вами место.

Учитывая, что это местоположение находится под c:\program files, оно действительно запрещено для Windows Vista и более поздних версий. Лучше выбрать место в %APPDATA% или в другом месте, где у вас есть доступ для записи.

Обратите внимание, что Windows пытается предотвратить запись в уязвимые места по соображениям безопасности. Даже если вы получите право, изменив свою учетную запись на администратора, вам все равно не следует помещать данные, настройки, файлы и т. Д. В Program Files. Вместо этого он должен находиться в каталоге данных текущего пользователя или в каталоге данных приложения пользователя по умолчанию. В Java вы можете получить этот путь следующим образом:

// get application path
System.getenv("APPDATA");
person Abel    schedule 23.08.2010
comment
Местоположение Program Files действительно могло быть проблемой. Однажды я совершил ошибку, установив веб-сервер apache под Program Files. С тех пор всегда сложно применить изменения к httpd.conf, даже с помощью простого текстового редактора ... - person Andreas Dolk; 23.08.2010
comment
@Andreas_D: два совета по Apache в Windows: (1) щелкните правой кнопкой мыши свой редактор (даже Блокнот) и выберите Запуск от имени администратора, (2) измените расположение httpd.conf (необходимо сделать в реестре или командном файле для командной строки). Я использую последний с большим удовлетворением (в любом случае, httpd.conf рядом с исполняемым файлом никогда не нравился). - person Abel; 23.08.2010

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

person Darin Dimitrov    schedule 23.08.2010
comment
Или в каталог, чтобы создать файл. Вы уверены, что хотите cample.xml (а не sample.xml)? - person Thilo; 23.08.2010
comment
Если пользователь создал файл в этом месте, то правильно ли мы программно перемещаем этот файл в другое место, например temp,% APPDATA%. - person raji; 23.08.2010
comment
@raji: пользователь не может создать файл в этом месте, потому что он получает Accès Refusé. Но когда возникает ошибка, вы можете предложить пользователю другое местоположение (например, %APPDATA%, см. Также мой подход к проблеме). - person Abel; 23.08.2010