4

Netbeans で Java アプリケーションを作成し、ボタンをクリックしたときに PDF ファイルを起動したいと考えています。

私が最初にしたことは、ファイル「manual.pdf」をクラスのあるディレクトリに配置することでした。次のコードを試しました。

if(Desktop.isDesktopSupported()) {
     try {
          File file= new File("manual.pdf");
          Desktop.getDesktop().open(file);
     } catch(IOException ex) {...}

しかし、実行すると、ファイルが存在しないと言われたので、

System.out.println(file.getAbsolutePath());

開こうとしていたファイルのパスを確認するために、

C:\Users\adrian\Documents\Mis Programas\Convertron\manual.pdf

しかし、ファイルは

C:\Users\adrian\Documents\Mis Programas\Convertron\src\org\sicadcam\convertron\manual.pdf

プロジェクトのルートディレクトリでファイルを探していました。

ファイルmanual.pdfをルート ディレクトリに配置すると機能しましたが、dist ディレクトリで実行可能 jar を実行すると機能しませんでした。

それから私は

File file = new File(ConvertronController.class.getResource("manual.pdf").toExternalForm());

何が起こるかを見るだけですが、うまくいきませんでした。

クラスと同じディレクトリでファイルを探すようにするにはどうすればよいですか?

または、アプリケーションをビルドしても動作し続けるようにするには、ファイルをどこに配置すればよいですか?

4

2 に答える 2

5

resources次のプロジェクト構造のように、PDF ドキュメントを Java パッケージに入れることができます。

TestProject
|
\---src
    |   
    +---org
    |   \---paulvargas
    |       \---test
    |               OpenTest.java
    |               
    \---resources
            manual.pdf

ファイルを開くには:

package org.paulvargas.test;

import java.awt.Desktop;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class OpenTest {
    public static void main(String[] args) throws Exception {
        if (Desktop.isDesktopSupported()) {
            // File in user working directory, System.getProperty("user.dir");
            File file = new File("manual.pdf");
            if (!file.exists()) {
                // In JAR
                InputStream inputStream = ClassLoader.getSystemClassLoader()
                                    .getResourceAsStream("resources/manual.pdf");
                // Copy file
                OutputStream outputStream = new FileOutputStream(file);
                byte[] buffer = new byte[1024];
                int length;
                while ((length = inputStream.read(buffer)) > 0) {
                    outputStream.write(buffer, 0, length);
                }
                outputStream.close();
                inputStream.close();
            }
            // Open file
            Desktop.getDesktop().open(file);
        }
    }
}
于 2013-06-03T22:41:27.830 に答える
0

私はこれを使用しました:

getClass().getResource("a_file.txt");

この場合、これが呼び出されるクラスは と同じディレクトリにありa_file.txtます。

于 2013-06-03T22:29:50.820 に答える