【发布时间】:2015-04-24 14:05:45
【问题描述】:
由于某种原因,每次我尝试使用 Tomcat 上的 java webapp 写入计算机上的文件夹时,我都会不断收到java.nio.file.AccessDeniedException。此文件夹的权限设置为对我计算机上的每个人 (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)
【问题讨论】:
-
尝试写入其他驱动器中的文件夹并检查。
-
不,它不适用于不同的驱动器或不同的文件夹。一件事可能是我电脑上的所有文件夹都标记为“只读”,即使它们不是只读的。当我取消标记后,它们会再次被检查。
-
@OneTwo,是否有任何其他代码正在使用相同路径的可能性。就像您访问了相同的路径而忘记释放资源一样。
-
不,我尝试在测试 java main 方法中编写一个字节数组,项目没有别的,我仍然得到同样的错误。据我所知,我没有打开其他正在访问该文件夹的应用程序。
-
我犯了同样的错误,您必须针对文件而不是文件夹。但是为什么它会抛出那个异常呢?它与文件/文件夹的访问无关,对吧?
标签: java file-io io access-denied