簡體   English   中英

Java6中java.nio.file.Paths的替代方法

[英]Alternative to java.nio.file.Paths in Java6

由於Java6和Android中不存在java.nio.file.Paths類及其包,因此我想知道如何為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上無效在Android6上則不能,因為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();

希望您能夠幫助我。

最好的問候,邁克爾

實際上,一開始使用Paths在設計技術上是錯誤的。 最好將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 ),以及它的運行時安裝。

你可以做

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

我從未使用過JavaFX和Android,因此尚未在您描述的上下文中對此進行測試,但這是您使用的Paths.get(...)慣用語的java.nio版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM