Получение " java.НИО.файл.AccessDeniedException" при попытке записи в папку

по какой-то причине я продолжаю получать java.nio.file.AccessDeniedException каждый раз, когда я пытаюсь написать в папку на моем компьютере, используя java webapp на Tomcat. Эта папка имеет разрешения на полный доступ для всех на моем компьютере (Windows). Кто-нибудь знает, почему я получаю это исключение?

вот мой код:

public void saveDocument(String name, String siteID, byte doc[]) {
    try {
        Path path = Paths.get(rootDirectory + siteID);
        if (Files.exists(path)) {
            System.out.println("Exists: " + path.toString());
            Files.write(path, doc);
        } else {
            System.out.println("DOesn't exist");
            throw new Exception("Directory for Site with ID " + siteID + "doesn't exist");
        }
    } catch (FileSystemException e) {
        System.out.println("Exception: " + e);
        e.printStackTrace();
    } catch (IOException e ) {
        System.out.println("Exception: " + e);
        e.printStackTrace();
    } catch (Exception e) {
        System.out.println("Exception: " + e);
        e.printStackTrace();
    }

и вот ошибка:

исключение: java.НИО.файл.AccessDeniedException: C:safesite_documentssite1 Ява.НИО.файл.AccessDeniedException: C:safesite_documentssite1 на солнце.НИО.файловая система.WindowsException.translateToIOException (WindowsException.Ява:83) на солнце.НИО.файловая система.WindowsException.rethrowAsIOException (WindowsException.java: 97) в Sun.НИО.файловая система.WindowsException.rethrowAsIOException (WindowsException.java: 102) в Sun.НИО.файловая система.WindowsFileSystemProvider.newByteChannel (WindowsFileSystemProvider.java: 230) на Яве.НИО.файл.спи.FileSystemProvider.newOutputStream(FileSystemProvider.java: 430) на Ява.НИО.файл.Файлы.newOutputStream(файлы.java: 172) на Яве.НИО.файл.Файлы.запись файлов.java: 3092)

возможные причины: см. мой пост на supersuser о том, как я не могу снять флажок "только для чтения" для любой из моих папок в windows 7. Несмотря на то, что все папки не читаются только на java.

2 ответов


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

Я

rootDirectory = "C:\safesite_documents"

но это должно было быть

rootDirectory = "C:\safesite_documents\newFile.jpg" 

извините, это была глупая ошибка, как всегда.


Я получал ту же ошибку при попытке скопировать файл. Закрытие канала, связанного с целевым файлом, решило проблему.

Path destFile = Paths.get("dest file");
SeekableByteChannel destFileChannel = Files.newByteChannel(destFile);
//...
destFileChannel.close();  //removing this will throw java.nio.file.AccessDeniedException:
Files.copy(Paths.get("source file"), destFile);