我有点问题,我似乎不明白是什么原因造成的。
我的项目中有一个文件夹,在这个文件夹中有一个类,还有一个资源文件(在本例中是jasper report)。
但访问文件的唯一方法是使用绝对路径或从项目根目录开始的路径。

String path = "src/main/java/Views/LagerMain/lager.jrxml";

^^这样可以,我的类lagercontroller和lager.jrxml都在lagermain文件夹下,但是当我尝试这样做时:
String path = "lager.jrxml";

找不到文件时出错。
我试着用谷歌搜索这个来更好地理解,但什么也没找到。
总之,为什么我不能访问我的文件,从类当他们都在同一个地方,为什么不相对路径工作。

最佳答案

如果主类在另一个目录中,那么程序将尝试访问那里的lager.jrxml而不是常规类的目录。
对于常规类目录:

String path = new String(MyClass.class.getProtectionDomain().getCodeSource().getLocation()
.getPath() + System.getProperty("line.separator") + "lager.jrxml");

如果不起作用,试试这个:
// your directory
File f = new File("src");
File[] matchingFiles = f.listFiles(new FilenameFilter() {
    public boolean accept(File dir, String name) {
        return name.startsWith("lager") && name.endsWith("jrxml");
    }
});

如果您有多个名为lager.jrxml的文件,则此方法将返回这两个文件,并且您需要使用for循环浏览它们。否则,你可以使用
String path = new String(matchingFiles[0].getAbsolutePath())

对于主类目录:
String path = new String(System.getProperty("user.dir")
 + System.getProperty("line.separator") + "lager.jrxml");

10-08 15:30