Linux上的Java-打开文件管理器

Linux上的Java-打开文件管理器,java,linux,javafx,sh,Java,Linux,Javafx,Sh,我正在为Windows和Linux(Debian/Ubuntu发行版)开发一个JavaFX应用程序,目前在LinuxMint上(老实说,除了Mint,我没有任何其他发行版的经验)。应用程序应该能够使用系统的文件管理器打开文件夹 在Windows上,我使用此选项时没有任何问题: Desktop dt = Desktop.getDesktop(); dt.open(path); 这在Linux上似乎不起作用,因此我想到简单地使用Bash命令,如: ProcessBuilder builder =

我正在为Windows和Linux(Debian/Ubuntu发行版)开发一个JavaFX应用程序,目前在LinuxMint上(老实说,除了Mint,我没有任何其他发行版的经验)。应用程序应该能够使用系统的文件管理器打开文件夹

在Windows上,我使用此选项时没有任何问题:

Desktop dt = Desktop.getDesktop();
dt.open(path);
这在Linux上似乎不起作用,因此我想到简单地使用Bash命令,如:

ProcessBuilder builder = new ProcessBuilder("sh", "-c", "nemo " + path);
但这只适用于Linux Mint肉桂版,因为KDE和其他版本可能带有不同的“默认”文件管理器(如Dolphin或Nautilus)


现在有没有一种方法可以通过Java或Bash编程获得关联的文件管理器

你必须三思而后行。。。你打开文件夹的目的是什么???这是什么意思?不同的操作系统(如windows、mac等)具有不同的文件管理器,因此这些机制会有所不同(主要是因为它们是从以前的环境演变而来的,没有任何共同之处,也没有考虑java)。甚至有些操作系统根本没有文件管理器,例如linux控制台应用程序根本不假设桌面正在运行,也无法调用文件管理器打开窗口(其中?根本没有窗口,只有黑色控制台屏幕)并显示其中包含的文件

Windows应用程序使用文件资源管理器来显示文件夹内容,与资源管理器的通信遵循的路径与linux中使用的路径没有任何共同之处(尽管机制类似)

在linux中,您还有一个额外的问题,即有几个(更好地说,很多)桌面环境相互竞争,并且做的事情不同

java支持并没有深入到桌面环境中,以独立于桌面环境的方式支持您所面临的任务


无论如何,有几个用java编写的文件管理器可以执行相同的操作,并且可以在任何环境(java、windows和mac)中运行,因此您可以运行其他路由,并使用通用文件管理器执行任务。从应用程序来看,与java编写的程序通信可能更容易

您需要找到默认的文件管理器。 您可以使用
xdgmime
命令进行此操作

xdg mime查询默认索引节点/目录
返回默认文件管理器

如果是dolphin,则输出:
dolphin.desktop

xdg open
但它有时可能启动错误的文件管理器

有关更多信息,请参阅


xdg open
已被弃用


改用
“gio open”
。请参见

我知道在Mac上,您可以运行打开路径,这将打开文件管理器运行幸运的是,这似乎不起作用。它提供了以下输出:
无法获取引用控制台的文件描述符
您可以对所有linux发行版使用“xdg open”。xdg打开一个@MehmetSunkur真棒,这就是我需要的,非常感谢!从我的入门帖子上看不清楚吗?我说我正在为Windows和一些Linux发行版开发,我提到了文件管理器,如Nemo、Dolphin等,我提到了这正是我的问题:如何确定正在使用的文件管理器(正如您所说,有不同的桌面环境)。应该提到它是一个GUI应用程序,所以不需要考虑只在Linux控制台上运行它。不管怎样,
xdg open
在Linux上实现了这个技巧,所以问题就解决了。@GenerationLost,从你的帖子中一切都很清楚。。。就连你上面的评论也更清楚地说明了这一点。。。。但无论如何,我认为所有这些环境都是在彼此不知情的情况下成长的。。。因此,它们无法兼容,甚至无法共享与它们通信的通用协议。如果你适应了尼莫(@GenerationLost(续)只能使用一个这样的协议。Java具有在这样不同的环境中运行而不需要很少修改或不需要修改的特性。你不能强迫像windows这样的商业产品与linux及其不同的发行版兼容。很抱歉,我仍然不明白你在哪里连接windows和linux。我明白Java文件管理器是独立的,但在我的例子中,我真的希望使用系统原生文件管理器。例如,可以将其视为在Eclipse中打开当前项目文件夹的可能性。它在Windows平台上打开Windows资源管理器,在Linux Mint上打开Nemo,这正是我想要的。N在Java中,我可以很容易地确定我在哪个系统上运行,并在此基础上打开相应的文件管理器。我没有连接任何东西……你需要一个可移植的解决方案(两种环境上都使用相同的api)我说这两种环境都没有通用的API。最主要的是,您有几个具有不同控制机制的环境。您必须有机会:第一,自己开发一个与所有环境兼容的API;第二,使用在所有环境中运行的文件管理器(我建议使用java)(这就是建议的原因)未触及。这样,所有环境都有相同的界面…但我根本没有将Linux与Windows连接。如果您需要本机文件管理器…“xdg open已弃用”,根据提供的源代码,xdg open是而且实际上没有弃用(这是一个似乎弃用的bug)