【问题标题】:Using the "file:" prefix to file paths in Java filename strings?在 Java 文件名字符串中对文件路径使用“file:”前缀?
【发布时间】:2017-12-03 20:44:12
【问题描述】:

获取 Java 项目的资源对我来说一直很困惑,因为在我看来文档并没有很好地解释它,而且每次我需要在项目中使用它时我都不得不重新学习它.最近,我尝试使用 JavaFX 加载图像。构造函数需要一个表示文件路径的字符串。过去我想出了一个非常老套的方法,但我最近遇到了this StackOverflow 帖子,接受的答案显示了一种非常简单的引用 Eclipse 项目顶层的方法,以便我可以访问构建路径中的源文件夹,并轻松找到我的图像文件。

这个特定的分隔符有名称吗?还有其他类似的分隔符吗?在可执行 JAR 中运行此代码时,使用此表示法是否会出现问题?

任何信息将不胜感激。如果这不是解决这个问题的最佳方法,并且有人可以给我一个充分、简单的解释,说明将来如何做到这一点,或者提供一个可以很好解释它的文章的链接,那就太好了。

【问题讨论】:

  • 你所说的“这个特殊的分隔符”是什么意思?
  • 我认为他的意思是'文件:'
  • 正确,@ProgrammersBlock

标签: java eclipse javafx


【解决方案1】:

您可以使用相对路径或绝对路径获取资源。相对路径从“工作目录”开始,这是您的应用程序运行的目录。绝对路径是明确的。在类路径之前检查工作目录。这是在像

这样的地方使用的
new File(filepath).

运行 Java 时,还需要考虑类路径。有些人寻找资源的另一种方式是

ClassLoader.getResource(String)

ClassLoader.getResourceAsStream(String)  

ClassLoader 可以接受 String 作为相对路径,并将检查类路径中的每个位置。 https://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html#getResourceAsStream(java.lang.String)

人们通过将他们的文件放在 src 文件夹中来获得结果,因为这通常会被复制到生成类文件的位置,该位置包含在类路径中。 您所说的“顶级”是工作目录。 Eclipse默认将工作目录设置为项目根目录。

【讨论】:

    【解决方案2】:

    relevant wikipedia page 很好地涵盖了file: 方案。

    但是我们生活在一个混乱的世界中,各种软件可能符合旧标准,或者不完全符合任何标准,或者可能包括对替代语法的支持。不幸的是,理解与特定软件系统一起使用的正确语法并不总是那么简单。

    【讨论】:

    • 但是在这种情况下,路径没有解析到 C:\ 驱动器。它指的是项目根目录(Eclipse 项目中 src 文件夹的父级)。因此,使用“file:res/images/etc.png”,并且“res”文件夹与 src 文件夹存在于同一目录中,它将从 res 文件夹中获取图像。还是我不理解 Wiki 条目?
    • 实际上,它并不是指“项目根目录”——它指的是“进程的当前目录”——而您的 IDE 恰好将当前目录设置为项目根目录。但是当您在另一个目录中手动启动应用程序时,没有这样的保证。
    • 那么这对于可执行 JAR 来说不是个好主意吗?
    • 我说的是总体上使用“file:”方案。但是,对于相对路径 URI,您使用的任何软件并不总是支持它,或者如果支持它,“基本路径”可能不是“显而易见的”路径。再说一遍,我说的是一般性。
    猜你喜欢
    • 2015-08-15
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    相关资源
    最近更新 更多