为Java项目中的文件提供固定路径(Netbeans)

为Java项目中的文件提供固定路径(Netbeans),java,jasper-reports,Java,Jasper Reports,我有一个生成jasper报告的Java项目,我要做的是给出一个文件(报告)的路径,然后运行我的项目,它运行得很好,但是当我必须给我的朋友JAR文件时,它总是需要将该文件放在特定的文件夹中,根据该文件夹,我的代码得到文件路径,然后必须将文件放在那里,下面是我的代码,以提供一些想法 public void generateReport(String dateStart, String dateEnd) { InputStream stream = null; Connection c

我有一个生成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找不到指定的路径


我知道这是由于代码部分
新文件(“”)。getAbsolutePath()
造成的,但我需要知道如何使其始终从项目中获取文件路径!这样我就不必总是把那个特定的文件放在那里了

最好从指定位置读取文件

下面是从指定位置读取文件的步骤

但是,如果同一代码在服务器上运行,则必须指定相对于服务器运行的根目录的路径

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

 File file = new File(location + filename);

如果要使其始终成为同一目录的绝对路径,只需指定整个路径即可

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");

但是,当我把那个JAR发送给某人,它会选择SRC文件夹中的所有文件,而不是我创建的文件夹中的文件时,会发生什么呢?等等,你想从你自己的JAR中获取这些文件吗?或者计算机上的文件?不不不我的意思是我已经创建了一个新的报告文件(logReport),我只想像其他文件一样选择这个文件,每次我将此jar文件发送给某人或将jar文件放置到其他文件夹时,路径没有任何更改。是的,我的意思是从我的jar文件中选择该文件,而不是从我的计算机的特定位置:)修改了答案,您需要使用getResourceAsStreamWhere是
reports
文件夹位于您的计算机和朋友的计算机中?它是否总是在同一个位置?reports文件夹在项目中,现在我不明白为什么它不能从该项目中获取路径?或者我必须做的是,它总是选择该路径,因为它选择了该文件夹中所有其他报告的路径。首先,您应该使用相对路径来获取该文件。第二,在制作JAR时,应该使用
getClass().getClassLoader().getResourceAsStream(“文件名”)。文件名应仅为文件名或完整路径?但我随后发现了这个错误“java.util.MalFormedUrlException”