我有正确集成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
。
答案 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);
}