微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java中库导出的相对路径

如何解决Java中库导出的相对路径

我正在尝试将.JAR导出为其他项目的库。问题是,在引用该库中的文件时,我需要使用相对路径,但是我发现的唯一解决方案是使用绝对路径,例如:

private static final String FILE = new File("").getAbsolutePath().concat("/src/bla/file.txt");

很明显,每当我尝试将这行代码作为导出的库运行时,我都会得到类似DRIVE/project/src/bla/file.txt的信息,这是不正确的,因为该.JAR可以位于DRIVE/projects内的任何地方,例如{{1} }。

在Nodejs中,我们有一些简单的函数可以根据运行时位置来检索相对路径。我该如何以捕获“运行时路径”的方式引用文件,以便我可以安全地引用它们并动态解决该路径?

对于那些急于将此问题标记为重复的人,请首先阅读。我不是在问如何从资源中读取文件

解决方法

要使用存在于类路径中的“ file.txt”,我们需要确保“ file.txt”存在于由类路径表示的目录中。

假设所有类文件都在名为“ / home / abcuser / target”的目录中生成。

为简单起见,我们将file.txt放在目标目录的根目录级别。

主要类是TestFileAccess.class(具有main方法的类)

要执行目标目录中存在的主类,可以使用以下命令

    java -cp /home/abcuser/target TestFileAccess

现在,在这种情况下,类路径为/ home / abcuser / target

要访问类路径上的资源,可以使用两种方法。

  • ClassLoader.getSystemResource和ClassLoader.getSystemResourceAsStream方法。
  • Class.getResource和Class.getResourceAsStream

ClassLoader和Class版本的方法之间的主要区别在于解释相对路径的方式。

Class方法解析与类包相对应的“目录”中的相对路径。 ClassLoader方法将相对路径视为绝对路径。即在类路径的“根目录”中解析它们

使用ClassLoader,您可以使用以下代码段

    InputStream inputStream = ClassLoader.getSystemResourceAsStream("file.txt");

要显式引用资源作为类路径文件,可以在执行Java代码时将资源路径添加到类路径中。 假设您的资源“ file.txt”位于/ home / abcuser / resources中。
您可以在Java执行启动期间将资源路径添加到类路径,如下所示

    java -cp "/home/abcuser/target:/home/abcuser/resources" TestFileAccess

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。