Java中项目文件夹的绝对路径

在这个话题上有很多困惑。已经提出了几个问题。事情似乎仍然不清楚。ClassLoader,绝对文件路径等

假设我有一个项目目录结构,

我的项目 - 

--dist

--lib

--src

- 测试

我在“ lib / txt”目录中有一个资源说“

txtfile.txt”。我想以系统独立的方式访问它。我需要项目的绝对路径。所以我可以将路径编码为abspath +“ / lib / Dictionary

/ txtfile.txt”

假设我这样做

 java.io.File file = new java.io.File("");   //Dummy file

String abspath=file.getAbsolutePath();

我得到当前的工作目录,它不一定是项目根目录。

假设我从’dist’文件夹执行了最后的’prj.jar’,该文件夹也包含“ lib / txt /

txtfile.txt”目录结构和资源,它也应该在这里工作。我应该是dist文件夹的绝对路径。

希望问题解决。

回答:

实际上,您应该通过类加载器使用getResource()或getResourceAsStream()来进行此类操作。特别是,这些方法使用ClassLoader来确定项目内资源的搜索上下文。

指定类似getClass().getResource("lib/txtfile.txt")的内容以拾取文本文件。

需要澄清的是:与其考虑如何获取资源的路径,不如考虑获取资源的方法-

在这种情况下,该文件位于某个目录(可能在您的JAR内部)中的文件中。在这种情况下,不必知道某些绝对路径,只需知道一些URL即可获取文件,ClassLoader会为您返回此URL。如果您想打开文件流,则可以直接执行此操作,而无需使用来弄乱URL

getResourceAsStream

您试图通过ClassLoader访问的资源必须位于Class-Path(在JAR文件的清单中配置)上。这很关键!ClassLoader使用Class-

Path查找资源,因此,如果您没有在Class-

Path中提供足够的上下文,它将无法找到任何内容。如果您添加.了ClassLoader,则应该根据引用资源的方式来解析JAR内部或外部的所有内容,尽管您当然可以更加具体。

引用带有前缀的资源.将导致ClassLoader也在JAR文件之外查找文件,而没有为资源路径加上句点前缀将指示ClassLoader仅在JAR文件内部查找文件。

这意味着,如果你有一些文件 的目录中JAR

lib与名称foo.txt,你想要得到的资源,那么你会运行getResource("lib/foo.txt");

如果相同的资源不在JAR中,则运行 getResource("./lib/foo.txt");

以上是 Java中项目文件夹的绝对路径 的全部内容, 来源链接: utcz.com/qa/401455.html

回到顶部