我正在开发适用于Windows和Linux(Debian / Ubuntu发行版)的JavaFX应用程序,目前在Linux Mint上(我老实说,除了Mint之外,我没有其他发行版的经验)。应用程序应该能够使用系统的文件管理器打开文件夹。
在Windows上我使用它没有问题:
Desktop dt = Desktop.getDesktop();
dt.open(path);
这似乎不适用于Linux,所以我想简单地使用Bash命令,如:
ProcessBuilder builder = new ProcessBuilder("sh", "-c", "nemo " + path);
但这仅适用于Linux Mint Cinnamon,因为KDE和其他版本可能会有不同的"默认"文件管理器(如Dolphin或Nautilus)。
现在有一种方法,无论是以编程方式使用Java还是使用Bash,都可以获得相关的文件管理器?
答案 0 :(得分:1)
您需要找到默认文件管理器。为此您可以使用Java 8
命令。
xdc-mime
返回默认文件管理器。
输出如果是海豚:xdg-mime query default inode/directory
OR
dolphin.desktop
但它有时会启动错误的文件管理器。
有关详情,请参阅documentation。
答案 1 :(得分:0)
你必须双倍思考......你是什么打开一个文件夹 ???这是什么意思?不同的操作系统(如windows,mac等)具有不同的文件管理器,因此这些机制存在差异(主要是因为它们是从以前的环境发展而来的,没有任何共同点,也没有考虑到java)。甚至根本没有文件管理器的操作系统,例如linux控制台应用程序根本不会假设桌面正在运行而且无法调用文件管理器来打开窗口(哪里没有窗口,只有黑色控制台)屏幕)并显示其中包含的文件。
Windows应用程序使用文件资源管理器来显示文件夹内容,并且与资源管理器的通信遵循一条路径,该路径不与Linux中使用的路径共享任何共同点(虽然机制类似)。
在Linux中你会遇到一个额外的问题,就是有几个(更好的说,很多)桌面环境在彼此之间进行竞争和做事。
java支持在桌面环境中没有深入挖掘,无法以桌面环境独立的方式完成您所面临的任务。
无论如何,有几个用java编写的文件管理器也可以在任何一个环境(java,windows和mac)中运行,因此你可以运行其他路由,并使用通用文件管理器完成任务。并且可能从您的应用程序更容易与用java编写的程序进行通信。