Linux 中的 Java 路径

标签 java linux path

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

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

关于Linux 中的 Java 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43668530/

相关文章:

java - 为现有 pdf 文件提供密码保护

java - 如何杀死java Invocable

java - 长时间运行的操作的状态应该存储在哪里?

Linux 终端 SCREEN 命令

memory - 用小内存在大图上进行广度优先搜索

java - 我怎样才能接近这台自动售货机?

linux - TCP_MAXSEG 不准确? (是 : Linux path MTU probing not working on accept():ed socket if requested using setsockopt())

linux - EC2 : Running in Background 上的 Kibana 5.2.0

java - 无法在Linux上为Java程序正确设置PATH变量

Python 2.7 未在 Cygwin 中加载