gpt4 book ai didi

java - Java 库导出的相对路径

转载 作者:行者123 更新时间:2023-12-05 07:02:31 27 4
gpt4 key购买 nike

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

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

显然,每当我尝试将这行代码作为导出的库运行时,我都会得到类似 DRIVE/project/src/bla/file.txt 的东西,这是不正确的,因为这个 .JAR 可以位于 DRIVE/projects 内的任何位置,例如 DRIVE/projects/lib/myLib.jar

在 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 版本之间的主要区别在于解释相对路径的方式。

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

使用 ClassLoader 你可以使用下面的代码片段

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

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

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

关于java - Java 库导出的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63543824/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com