Доступ к FileOutputStream запрещен: 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)

Тем не менее я администратор компьютера, и у меня обычно есть учетная запись all permissions. Я не понимаю, почему он меня отшил Access is denied.

4 5

4 ответа:

Вы пытаетесь получить доступ к каталогу. Параметр 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:\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 ( ), и ваша проблема будет решена.

Спасибо.

У меня была аналогичная проблема, в которой я разархивировал файл jar, который не удался из-за этого сообщения об ошибке. Эта банка была банкой с зависимостями, и я недавно добавил новую зависимость. После изучения содержимого банки оказалось, что у меня есть файл LICENSE и папка license в одном корне. Хотя это полностью допустимо в Linux, файловая система Windows будет блевать. Обходной путь в моем случае был ловушкой этой ошибки в try / catch. В ловушке, проверьте, если вы находитесь на windows, если да, войдите предупреждение, как есть мало что можно сделать, иначе бросят.