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