java - 替代 Java6 中的 java.nio.file.Paths

标签 java android javafx classloader

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

到目前为止,这是我的项目结构:

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 上无效,因为 Paths 类在 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();

希望你能帮助我。

最好的问候, 迈克尔

最佳答案

事实上,路径的使用从一开始就在设计技术上是错误的。 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 ),以及它的运行时安装。

关于java - 替代 Java6 中的 java.nio.file.Paths,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27903117/

相关文章:

java - 能看懂java中的setter和getter

java - Eclipse Java CXF 2.7.9 上的 Webclient - 修复格式错误的 .wsdl 文件

java - 自定义 RecyclerAdapter 和 startActivityForResult

Javafx和文件关联: opening the selected file

java - JavaFX WebEngine 中的 HyperlinkListener

java - 如何从数据库填充 Neo4j 关系类型值

java - 安卓编程: Quiz Questions Not Working

android - OnWindowFocusChanged 和 onCreate - Android

android - 使用ShareIntent将文件上传到YouTube失败

JavaFx 细线颜色失真