-1

親愛なる専門家、この質問は関連しています

更新された質問

そして、次の2つのコードを使用しました。

からアプリケーションを実行すると、次のコードは正常に動作しますworkspace

URL resource = Thread.currentThread().getContextClassLoader().getResource("resources/User_Guide.pdf");  
            File userGuideFile = null;  
            try {  
                userGuideFile = new File(resource.getPath());  
                if (Desktop.isDesktopSupported())  
                {  
                    Desktop desktop = Desktop.getDesktop();  
                    desktop.open(userGuideFile);  
                }  
            } catch (Exception e1) {  
                e1.printStackTrace();  
            }  

しかし、別の場所にコピーproject.jarすると、ファイルが開かれず、ログに として表示されますfile is not found "c:\workspace\project...pdf"。そして、私は同じページから次のコードを使用しました.My pdfReader adobe readerは例外を示しています file is either not supproted or damaged:

コード:

if (Desktop.isDesktopSupported())     
{     
    Desktop desktop = Desktop.getDesktop();     
    InputStream resource = Thread.currentThread().getContextClassLoader().getResource("resources/User_Guide.pdf");  
try  
{  
    File file = File.createTempFile("User_Guide", ".pdf");  
    file.deleteOnExit();  
    OutputStream out = new FileOutputStream(file);  
    try  
    {  
        // copy contents from resource to out  
    }  
    finally  
    {  
        out.close();  
    }  
    desktop.open(file);     
}     
finally  
{  
    resource.close();  
}  
}  

アイデアをください。あなたの助けに感謝します。ありがとうございました

注:*.txtファイルを開こうとしましたが、正常に動作しています。しかし、PDFとでは機能しませんDOC。主な問題は、プロジェクトのワークスペース ディレクトリを変更するアプリケーションを実行するときです。実際に私は次のようにしたい: メニューの下にあるNtebeansキーボードショートコードドキュメントHelp

4

2 に答える 2

1

jar は zip アーカイブです。なので、まずは7zip/WinZipなどで調べてみてください。パスが実際にあることを確認してくださいresources/User_Guide.pdf(大文字と小文字が区別されます!)。/User_Guide.pdfそれは瓶に入っている可能性が非常に高いです。

リソースからファイル (= ファイルシステム上のファイル) をすぐに取得することはできません (たまたま)。したがって、InputStream.

InputStream in = getClass().getResource("/resources/User_Guide.pdf");

NullPointerException見つからないとき。getClass では、クラスは同じ jar 内にある必要があり、この場合のパスは/.

これで、入力ストリームを一時ファイルにコピーして、それを開くことができます。Java 7 では:

File file = File.createTempFile("User_Guide", ".pdf");  
Files.copy(in, file.toPath());

Files.copy 行で FileAlreadyExistsException を受け取った場合は、次の CopyOption を追加します。

Files.copy(in, file.toPath(), StandardCopyOption.REPLACE_EXISTING);

Java <7 の場合:

// copy contents from resource to out
byte[] buf = new byte[4096];
while ((int nread = in.read(buf, 0, buf.length)) > 0) {
    out.write(buf, 0, nread);
}
于 2013-09-26T09:12:09.010 に答える