Java - 访问被拒绝 java.io.FileNotFoundException

57

我有以下代码:

List<FileItem> items = uploadHandler.parseRequest(request);
for (FileItem item : items) {
    if (!item.isFormField()) {
        File file = new File("D:/Data");
    }
}
当我尝试保存文件时,出现以下错误。
java.io.FileNotFoundException: D:\Data (Access is denied.)
什么可能是原因,我该如何解决?我确实对这个文件夹拥有读写权限。

查看是否存在于“D:/Data”目录 - code_fish
2
我猜测这是因为您尝试在每次for循环迭代中打开相同的文件。 - Francis
如果没有看到实际保存文件的代码,或者没有能编译并重现问题的代码,很难作出判断。但我猜测可能是该文件已经存在(或者有一个同名的目录已经存在)。同时请注意,在 Windows 系统中,文件名称是不区分大小写的。 - Mikkel Løkke
你应该使用File.separatorChar来编写符合标准的代码,而不是使用'/'或''。 - sudmong
以上代码中没有任何一行会抛出FilNotFoundException异常。那么异常到底是在哪里被抛出的,周围的代码又是什么呢? - jboi
5个回答

106

当您创建一个新的文件时,应该提供文件名,而不仅仅是您想要放置文件的目录。

尝试使用类似以下的内容:

File file = new File("D:/Data/" + item.getFileName());

1
只是提醒一下,相反的情况也可能发生。我曾经将一个目录作为文件写入zip文件中,当解压缩时,由于该目录已经存在,我遇到了这个错误。 - hayden.mumm

22

虽然不完全是这个问题的情况,但这可能会有所帮助。当我在新文件上调用mkdirs()而不是其父目录时,就会出现此异常。

File file = new java.io.File(path);
//file.mkdirs(); // wrong! 
file.getParentFile().mkdirs(); // correct!
if (!file.exists()) {
    file.createNewFile();
} 

8

我搜索了这个问题并得到以下答案:

  1. "C:\Program Files\Apache-tomcat-7.0.69\"移除多余的反斜杠(\)
  2. 在Tomcat文件夹中右键单击日志文件夹,在安全选项卡中将该文件夹设置为可写权限,然后以管理员身份重新启动NetBeans。

这样就可以解决您的问题了。


1
我只是需要删除末尾的反斜杠。 - Saikat
我应该从哪个位置删除反斜杠? - Daniel Galion

6

您需要为用户控件设置权限。

  1. 前往 C:\Program Files\
  2. 右键点击 java 文件夹,选择属性。选择安全选项卡。
  3. 在那里,点击“编辑”按钮,弹出JAVA权限窗口。
  4. 点击添加,弹出新窗口。在“输入对象名称”框中,输入您的用户帐户名称,然后单击确定(如果已存在,则跳过此步骤)。
  5. 现在在“JAVA权限”窗口中,您将看到几个可点击的选项,例如CREATOR OWNER、SYSTEM,在其中有您的用户名。点击它,在子窗口的权限中选中完全控制选项。
  6. 最后,点击应用并确定。

2
这将更改Java可执行文件本身的权限。没有理由这样做。 - Harry Johnston

4

确保目录存在且您有访问权限,并将文件添加到路径以写入日志:

File file = new File("D:/Data/" + item.getFileName());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接