【问题标题】:JavaFX - `isDirectory` Not Returning TRUEJavaFX - `isDirectory` 不返回 TRUE
【发布时间】:2017-07-25 02:30:26
【问题描述】:

为什么这个检查不返回 true?

    String dirpath = getClass().getResource("../util/assets/sounds/").toString();
    File dir = new File(dirpath);
    System.out.println(dirpath);
    System.out.println(dir);
    System.out.println(dir.isDirectory());

它返回这些:

file:/D:/JAVA/exercises/FX/TasksList/build/classes/taskslist/util/assets/sounds
file:\D:\JAVA\exercises\FX\TasksList\build\classes\taskslist\util\assets\sounds
false

我使用 netbeans IDE 作为源代码运行它。

【问题讨论】:

  • 你的app是怎么打包的,是jar文件吗?如果是这样,那么资源将使用 jar 协议,而不是文件协议。如果打印字符串getClass().getResource("../util/assets/sounds/").toString(),它会返回什么?
  • @jewelsea 请查看编辑..

标签: file javafx directory


【解决方案1】:

getClass().getResource(...) 返回URL,而不是文件路径字符串。 A file path string 是 File 的构造函数所需要的。

您可以尝试使用Paths constructorURI 构造一个有效的文件路径,您可以使用toUri() 从资源中获取该路径。

所以,这应该可行:

Files.isDirectory(
    Paths.get(
        getClass().getResource("../util/assets/sounds/").toUri()
    )
)

或者

new File(
    getClass().getResource("../util/assets/sounds/").toUri()
).isDirectory();

我还没有 Windows 机器可以试一试。

注意:如果您开始将应用程序打包为 jar(推荐),那么这种技术将失效。该资源不会是文件,而是 jar 资源。没有与 jar 资源相关的文件目录的概念。

【讨论】:

    【解决方案2】:

    应该是:

    String dirpath = getClass().getResource("../util/assets/sounds/").getPath();

    代替:

    String dirpath = getClass().getResource("../util/assets/sounds/").toString();

    它会起作用的。

    【讨论】:

    • 小心使用这个。如果路径包含 url 编码的项目(例如编码为 %20 的空格),则它可能会中断。
    猜你喜欢
    • 2011-10-05
    • 2017-07-21
    • 1970-01-01
    • 2016-01-20
    • 2017-01-28
    • 2013-04-22
    • 1970-01-01
    • 2023-02-16
    • 2016-02-22
    相关资源
    最近更新 更多