java库导出的相对路径

vyswwuz2  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(550)

我正在尝试将一个.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中,我们有简单的函数根据运行时位置检索相对路径。如何引用文件,使其捕获“运行时路径”,以便安全地引用它们并动态求解路径?
对于那些急于把这个问题标为重复的人,请先仔细阅读。我不是在问如何从资源中读取文件!

rsaldnfx

rsaldnfx1#

要使用类路径中存在的“file.txt”,我们需要确保“file.txt”存在于类路径表示的目录中。
假设在名为“/home/user/target”的目录中生成了所有类文件。
为了简单起见,我们将把file.txt放在目标目录根级别。
主类是testfileaccess.class(具有main方法的类)
要执行目标目录中的主类,可以使用以下命令

java -cp /home/abcuser/target TestFileAccess

现在,本例中的类路径是/home/user/target
要访问classpath上的资源,可以使用两种方法。
classloader.getsystemresource和classloader.getsystemresourceasstream方法。
class.getresource和class.getresourceasstream
类加载器和类版本的方法之间的主要区别在于解释相对路径的方式。
类方法解析“目录”中与类包相对应的相对路径。类加载器方法将相对路径视为绝对路径;i、 e.在类路径的“根目录”中解析它们
使用classloader可以使用下面的代码段

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

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

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

相关问题