web-dev-qa-db-ja.com

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:\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

9
mortiped

ディレクトリにアクセスしようとしています。 FileOutputStreamのパラメータは、ファイルへのFile/Pathオブジェクトpointingである必要があります。

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

詳細については、 http://docs.Oracle.com/javase/7/docs/api/Java/io/FileOutputStream.html を参照してください。

12
Kick

そのファイルの場所にアクセスする権限が必要です。 2つの可能な解決策があります。

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. 

この質問からの回答ではありません

Windowsでは大文字と小文字が区別されないため、同じ例外が発生しました。
「test」という名前のファイルと「TEST」という名前のファイルを作成しようとすると、同じ例外が生成されます。

0
thiagola92

このエラーメッセージが原因で失敗したjarファイルを解凍したという同様の問題がありました。このjarは依存関係のあるjarであり、最近、新しい依存関係を追加しました。 jarの内容を調べたところ、同じルートにLICENSEファイルとフォルダーlicenseがあることがわかりました。これはLinuxでは完全に有効ですが、Windowsファイルシステムは動作しません。私の場合の回避策は、このエラーをtry/catchにトラップすることでした。キャッチでは、Windowsを使用しているかどうかを確認します。そうである場合は、実行できることはあまりないため、警告をログに記録します。それ以外の場合はスローします。

0
spy

実際には、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()でファイル名ORファイルパスを使用すると、問題が解決します。

ありがとう。

0
Bhanu