FileOutputStream访问被拒绝:JAVA

时间:2014-02-25 07:55:41

标签: java fileoutputstream

我有正确集成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

7 个答案:

答案 0 :(得分:12)

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

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

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

答案 1 :(得分:1)

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

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. 

答案 2 :(得分:0)

实际上您正在尝试使用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()一起使用,您的问题就会解决。

  

感谢。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

我在Ubuntu上很好地运行了代码。
FileOutputStream = new FileOutputStream("test");

进入Windows后,我开始看到此异常。
我花了一些时间注意到发生这种异常是因为我有一个名为 TEST 目录,并试图创建一个名为 test的文件

我认为Windows不区分大小写,因此模棱两可。
尽管在Ubuntu上C:\directory\TEST不等于C:\directory\test
在Windows上,C:\directory\TEST等于C:\directory\test

答案 5 :(得分:0)

您可以尝试以下方法:

if(!file.canRead()){
    file.setReadable(true);
 }

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

答案 6 :(得分:0)

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

    }