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 回答