it-roy-ru.com

Получение "Java.nio.file.AccessDeniedException" при попытке записи в папку

По какой-то причине я продолжаю получать Java.nio.file.AccessDeniedException каждый раз, когда пытаюсь записать в папку на моем компьютере с помощью веб-приложения Java на 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.nio.file.AccessDeniedException: C:\safesite_documents\site1 Java.nio.file.AccessDeniedException: C:\safesite_documents\site1 в Sun.nio.fs.WindowsException.translateToIOException (WindowsException.Java:83) в Sun.nio.fs.WindowsException.rethrowAsIOException (WindowsException.Java:97) в Sun.nio.fs.WindowsException.rethrowAsIOException (WindowsException.Java:102) в Sun.nio.fs.WindowsFileSystemProvider.newByteChannel (WindowsFileSystemProvider.Java:230) в Java.nio.file.spi.FileSystemProvider.newOutputStream (FileSystemProvider.Java:430) на Java.nio.file.Files.newOutputStream (Files.Java:172) на Java.nio.file.Files.write (Files.Java:3092)

Возможная причина: Смотрите мой пост в supersuser о том, как я не могу снять флажок «Только чтение» для любой из моих папок в Windows 7. Даже если все папки не читаются только для чего-либо, кроме Java.

40
OneTwo

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

Я имел

rootDirectory = "C:\\safesite_documents"

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

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

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

62
OneTwo

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

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);
0
Nwafor-Orizu Chaluchukwu