文件输出流访问被拒绝:JAVA



我有以下代码,正确集成了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:Usersvalentin.schaeferPicturestuto (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重温我.

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

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

有关更多详细信息,请查看 http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html

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

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. 

实际上您正在尝试使用 FileOutputStream( ) 访问目录表示您正在尝试访问目录"C:\用户\管理员\图片\tuto"用-

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

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

文件名或文件路径与文件输出流( )一起使用,您的问题将得到解决。

谢谢。

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

不是这个问题的答案

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

你可以试试这个:

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

,您可以动态更改对文件或文件夹的访问权限。注意:这仅适用于 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);
    }

最新更新