在 Java6 中替代 java.nio.file.Paths

Alternative to java.nio.file.Paths in Java6

由于 java.nio.file.Paths class 及其包在 Java6 和 Android 中不存在,我想知道如何为 [=16 使用替代方法=]?我尝试在 JavaFX 中使用 FXMLLoader 加载 fxml 文件。通常我将所有 fxml 文件放在 src 目录中的特定布局包中,这样可以很容易地通过相对路径加载这些文件。但是,因为我为 Android 构建 JavaFX 项目,我需要将 fxml 文件存储到 assets 目录中,以便它自动包含在 apk 文件中(使用 gradle 构建) .

这是我目前的项目结构:

MyProject
-- src\main\java\somepackage\Main.java
-- assets\sample_layout.fxml

但是,当我构建 apk 时,结构如下所示:

Content of MyProject.apk
-- assets\sample_layout.fxml
-- classes.dex // which contains all compiled classes
   -- somepackage\Main.java

我需要从 Main.java 访问 assets 目录中的 sample_layout.fxml。知道我该怎么做吗?

这是在 Java7 上进行的工作,但在 Java6 上没有(并且在 Android 上没有,因为路径 class 在 Java6 中不可用):

URL myFxmlLayout= Paths.get("assets/sample_layout.fxml").toUri().toURL();
FXMLLoader loader = new FXMLLoader(myFxmlLayout);
AnchorPane page = (AnchorPane) loader.load();

对于 Java6 我尝试了以下方法,但不起作用:

URL myFxmlLayout= new URI("file:///assets/sample_layout.fxml").toURL();
// OR
URL myFxmlLayout= new URI("file:///../../../../assets/sample_layout.fxml").toURL();

希望你能帮助我。

此致, 迈克尔

你可以做到

new File(filename).toURI().toURL()

我从未使用过 JavaFX 和 Android,所以我没有在您描述的上下文中对此进行测试,但它是 [=12] 的 java.nio 之前的版本=] 你用的成语。

事实上,路径的使用从一开始就在设计技术上是错误的。 FXML 源最好作为只读资源打包在 jar 中。

MyProject
-- src\main\java\somepackage\Main.java
-- src\main\resources\assets\sample_layout.fxml

URL myFxmlLayout= Main.class.getResource("/assets/sample_layout.fxml");

在您的原始设计中,您可以改用 new File(...),但必须注意 assets (getAbsolutePath) 的路径及其运行时安装。