【问题标题】:FileOutputStream access is denied : JAVAFileOutputStream 访问被拒绝:JAVA
【发布时间】:2023-04-10 00:33:01
【问题描述】:

我将以下代码与 iText 库正确集成。

import java.io.*;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfWriter;

@org.eclipse.jdt.annotation.NonNullByDefault(true)
public class HelloWorld {      
    public static final String RESULT = "C:\\Users\\administrator\\Pictures\\tuto";

    @SuppressWarnings("resource")
    public static void main(String[] args) throws DocumentException, IOException {
        Document document = new Document();
        PdfWriter.getInstance(document, new FileOutputStream(RESULT));
        document.open();
        document.add(new Paragraph("Hello World!"));
        document.close(); 
    }
}

这段代码给我返回了一条错误信息,如下所示。

Exception in thread "main" java.io.FileNotFoundException: C:\Users\valentin.schaefer\Pictures\tuto (Access is denied)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at java.io.FileOutputStream.<init>(Unknown Source)
    at HelloWorld.main(HelloWorld.java:25)

但我是计算机管理员,我通常拥有所有权限帐户。我不明白他为什么要回我Access is denied

【问题讨论】:

  • 目录是否存在?
  • 您是否尝试从用户空间之外的某个地方访问文件?还是不同的驱动器?
  • 是的,目录存在且文件夹有傻瓜权限
  • 看起来您可能正在指向一个目录。尝试确保RESULT 指向一个不存在的文件或可以编辑和保存的文件。

标签: java fileoutputstream


【解决方案1】:

您正在尝试访问该目录。 FileOutputStream 的参数应该是一个File/Path 对象指向到一个文件:

 FileOutputStream file  = new FileOutputStream("path/file.txt");
                   File -------------------------------^

更多详情请查看http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html

【讨论】:

    【解决方案2】:

    您需要具有访问该文件位置的权限。有两种可能的解决方案。

    1. use deferent file location to store your file (eg: D:\\somewhere)  
    2. make sure that you have permission to access current location by granting 
       read write permissions. 
    

    【讨论】:

      【解决方案3】:

      实际上您正在尝试使用 FileOutputStream( ) 访问目录 表示您正在尝试访问目录“C:\Users\administrator\Pictures\tuto” 使用 -

      public static final String RESULT = "C:\\Users\\administrator\\Pictures\\tuto";
      new FileOutputStream(RESULT);
      

      这是错误的,因为可以提供给 FileOutputstream( ) 的有效输入是文件名(如“xyz.txt”)或文件路径(如“C:\sample\xyz.txt”)。

      在 FileOutputstream( ) 中使用文件名或文件路径,您的问题就会解决。

      谢谢。

      【讨论】:

        【解决方案4】:

        我有一个类似的问题,我解压缩了一个由于此错误消息而失败的 jar 文件。这个 jar 是一个带有依赖项的 jar,我最近添加了一个新的依赖项。检查 jar 内容后,我发现我在同一个根目录中有一个 LICENSE 文件和一个文件夹 license。虽然这在 Linux 上完全有效,但 Windows 文件系统会出错。在我的情况下,解决方法是在 try/catch 中捕获此错误。在 catch 中,检查您是否在 Windows 上,如果是,则记录警告,因为没有什么可以做的,否则抛出。

        【讨论】:

          【解决方案5】:

          不是这个问题的答案

          我遇到了同样的异常,因为 Windows 不区分大小写。
          尝试创建一个名为“test”的文件和另一个名为“TEST”的文件将产生相同的异常。

          【讨论】:

            【解决方案6】:

            你可以试试这个:

            if(!file.canRead()){
                file.setReadable(true);
             }
            
             FileOutputStream file  = new FileOutputStream("path/file.txt");
            

            【讨论】:

            • 请避免仅发布代码答案并提供一些解释以澄清您的答案。
            【解决方案7】:

            这样,您可以动态更改对文件或文件夹的访问权限。 注意:这仅适用于 Linux 机器。

            private void filePermissions(File filePath) throws IOException {
            
                    Path path = Paths.get(filePath.toString());
            
                    Set<PosixFilePermission> perms = java.nio.file.Files.readAttributes(path, PosixFileAttributes.class)
                            .permissions();
            
                    perms.add(PosixFilePermission.OWNER_WRITE);
                    perms.add(PosixFilePermission.OWNER_READ);
                    perms.add(PosixFilePermission.OWNER_EXECUTE);
                    perms.add(PosixFilePermission.GROUP_WRITE);
                    perms.add(PosixFilePermission.GROUP_READ);
                    perms.add(PosixFilePermission.GROUP_EXECUTE);
                    perms.add(PosixFilePermission.OTHERS_WRITE);
                    perms.add(PosixFilePermission.OTHERS_READ);
                    perms.add(PosixFilePermission.OTHERS_EXECUTE);
                    java.nio.file.Files.setPosixFilePermissions(path, perms);
            
                }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-05-14
              • 2010-12-28
              • 2010-12-08
              • 1970-01-01
              • 2011-01-26
              • 1970-01-01
              • 2013-11-02
              • 1970-01-01
              相关资源
              最近更新 更多