Java - 访问被拒绝 java.io.FileNotFoundException [重复]

Posted

技术标签:

【中文标题】Java - 访问被拒绝 java.io.FileNotFoundException [重复]【英文标题】:Java - Access is denied java.io.FileNotFoundException [duplicate] 【发布时间】:2013-11-02 21:24:36 【问题描述】:

我有以下代码:

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” 我猜这是因为您尝试在 for 循环的每次迭代中打开同一个文件。 很难说没有看到实际保存文件的代码,或者没有编译和重现问题的代码,但我猜可能文件已经存在(或者目录存在姓名)?另外请注意,Windows 上的文件不区分大小写。 你应该使用 File.separatorChar 来使你的代码符合标准,而不是使用 '/' 或 '\'。 以上代码中没有一行可以抛出FilNotFoundException。异常究竟是在哪里抛出的,它周围的代码是什么? 【参考方案1】:

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

尝试类似的东西

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

我已经搜索过这个问题,我得到了以下答案:

    "C:\Program Files\Apache-tomcat-7.0.69\" 删除多余的反斜杠 (\) 右键单击tomcat文件夹中的日志文件夹,并在安全选项卡中将此文件夹作为写入权限,然后以管理员身份重新启动net-beans。

你的问题会解决的

【讨论】:

我只需要删除结尾的反斜杠 我应该从哪个地方删除反斜杠?【参考方案4】:

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

    转到 C:\Program Files\ 右键单击 java 文件夹,单击属性。选择安全标签。 在此处,单击“编辑”按钮,将弹出“JAVA 权限”窗口。 点击添加,会弹出一个新窗口。在那,在“输入对象名称”框中,输入您的用户帐户名称,然后单击 好的(如果已经存在,请跳过此步骤)。 现在在“JAVA 权限”窗口中,您将看到几个可点击的 CREATOR OWNER、SYSTEM 等选项,其中包括您的 用户名。单击它,然后选中标记 FULL CONTROL 选项 子窗口的权限。 最后,点击应用即可。

【讨论】:

这是更改 Java 可执行文件本身的权限。没有理由这样做。【参考方案5】:

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

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

【讨论】:

以上是关于Java - 访问被拒绝 java.io.FileNotFoundException [重复]的主要内容,如果未能解决你的问题,请参考以下文章

java IO

java IO流的一些操作方法

Java - IO 流

Java - IO 流

Java.io.File

Java IO -- File类