JavaFX - `isDirectory`没有返回TRUE

时间:2017-07-25 02:30:26

标签: file javafx directory

为什么此检查不会返回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作为源代码运行它。

2 个答案:

答案 0 :(得分:3)

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

您可以尝试使用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资源的文件目录的概念。

答案 1 :(得分:0)

应该是:

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

而不是:

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

它会起作用。