假设您要使用Gluon JavaFX制作的应用程序打开图片或文件。是否有任何文件导航窗口可用于选择该文件或图片?
假设我们知道我们的localRoot = /root
File localRoot = Services.get(StorageService.class)
.flatMap(s -> s.getPublicStorage(""))
.orElseThrow(() -> new RuntimeException("Error retrieving private storage"));
还是我需要手动将文件放置在文件夹中,然后使用表格视图扫描所有文件并将它们放置在表格视图中以便我可以选择它们?
答案 0 :(得分:3)
您使用公共存储API是错误的,您需要提供一个有效的名称,例如Documents
或Pictures
。这些是文件系统中的有效公用文件夹。
例如,您可以获得该文件夹中的文件列表:
File picRoot = Services.get(StorageService.class)
.flatMap(s -> s.getPublicStorage("Pictures"))
.orElseThrow(() -> new RuntimeException("Folder notavailable"));
File[] files = picRoot.listFiles();
if (files != null) {
for (File file : files) {
System.out.println("File: " + file);
}
}
如何处理这些文件,或如何将其呈现给用户,取决于您自己。
但是,如果要浏览图像库并将这些图像呈现给用户,以便他/她可以选择一个,则应使用PicturesService::loadImageFromGallery
:
从设备的图片库中检索图片
这将使用本机浏览器应用程序,您可以在所有带有图片的常用文件夹中进行搜索。
它将返回Optional<Image>
(如果用户取消则为空),并且您也可以使用getImageFile()
返回Optional<File>
以及与原始图像相关联的文件。
来自JavaDoc:
ImageView imageView = new ImageView();
Services.get(PicturesService.class).ifPresent(service -> {
// once selected, the image is visualized
service.loadFromGallery().ifPresent(image -> imageView.setImage(image));
// and the file can be shared
service.getImageFile().ifPresent(file ->
Services.get(ShareService.class).ifPresent(share ->
share.share("image/jpeg", file)));
});