Получение " 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);