0

私はjasperレポートを生成するJavaプロジェクトを持っています。ファイル(レポート)のパスを指定してプロジェクトを実行すると問題なく実行されますが、JARファイルを友人に渡す必要がある場合は、常にそのファイルを配置する必要があります私のコードがファイルパスを取得し、そこにファイルを配置する必要がある特定のフォルダーで、私のコードはいくつかのアイデアを提供するために以下にあります

public void generateReport(String dateStart, String dateEnd) {
    InputStream stream = null;
    Connection connection = null;
    Class.forName("com.mysql.jdbc.Driver");
    connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/app", "root", "");
    stream = new FileInputStream(new File("").getAbsolutePath() + "/reports/logReport.jrxml");
    JasperDesign jasperDesign = JRXmlLoader.load(stream);
    jasperReport = JasperCompileManager.compileReport(jasperDesign);
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, connection);

    //frame.getContentPane().add(dateSetter, BorderLayout.PAGE_START);
    frame.getContentPane().add(new JRViewer300(jasperPrint), BorderLayout.CENTER);
    frame.setResizable(false);
    frame.setSize(900, 600);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    isVisible = true;
    connection.close();
    stream.close();
    }

コード内で、指定されたパスからファイルを取得します

/reports/logReport.jrxml

しかし、JARファイルを別の場所に置いて実行すると、エラーが発生します

C:\Desktop\reports\logReport.jrxml で指定されたパスが見つかりません。

コード部分new File("").getAbsolutePath()が原因であることはわかっていますが、プロジェクト内から常にファイルパスを取得するようにする方法を知る必要があります! その特定のファイルを常にそこに配置する必要がないように!

4

2 に答える 2

2

常に同じディレクトリへの絶対パスにしたい場合は、パス全体を指定するだけです。

stream = new FileInputStream(new File("C:/path/to/my/reports/logReport.jrxml"));

jarが実行されているディレクトリに対して相対的に必要な場合。

stream = new FileInputStream(new File("path/to/my/reports/logReport.jrxml"));

代わりに、Jar 自体からファイルをロードしようとしている場合は、別の方法で行う必要があります。

stream = this.getClass().getResourceAsStream.("/path/to/my/reports/logReport.jrxml");
于 2013-05-13T17:52:15.247 に答える
0

指定した場所からファイルを読み取ったほうがよい

指定した場所からファイルを読み取るためのリンクを次に示します。

ただし、同じコードがサーバーで実行されている場合は、サーバーが実行されているルート ディレクトリからの相対パスを指定する必要があります。

 String location = "/opt/reports/";
 String filename = "logReport.jrxml";

 File file = new File(location + filename);
于 2013-05-13T17:52:08.623 に答える