在Linux / Java / Scala中枚举附加的DVD驱动器

在我的Scala(在Java之上运行)应用程序我想获得包含DVD媒体的所有驱动器的列表,例如:

  • / dev / scd0星际迷航DS9 DVD1
  • / dev / scd0 4400 DVD1

不知道是否有可能获得光盘的名称,但path对我来说是重要的。

我更喜欢纯Java / Scala解决scheme(使用file.io的东西)。 如果这是不可能的,访问正确的Linux文件也很好(如/ proc / something)。

提前致谢!

Solutions Collecting From Web of "在Linux / Java / Scala中枚举附加的DVD驱动器"

我认为你用java.io. *运气不好,但是如果你不介意打电话到Linux命令,你可以通过以下方式来组装数据:

  1. 调用“mount”并捕获输出的第一列。
  2. 对从第1步中捕获的每个值调用“volname”。

根据volname的手册页,它只返回ISO-9660文件系统(例如DVD)的数据,所以任何返回空的设备路径都可以忽略。

有一个(未经测试)的可能性,让您的驱动器与纯Java代码。 至少在Windows上。

它有点hacky,并不能在Linux下工作(因为Linux得不到太阳集成的爱,我相信)。

import javax.swing._ import javax.swing.filechooser._ val chooser = new JFileChooser() val view = chooser.getFileSystemView() 

FileSystemView类提供了一些功能,如询问可能的根是否是驱动器(isDrive())。 Swing使用这个来为你提供正确的图标文件选择器,所以它应该在Windows下工作,因为IIRC在那里显示正确的符号。 在Linux下,不幸的是只显示“/”根。

Linux在这种情况下不起作用的原因之一就是,Linux开发人员不断地改变他们向用户空间呈现这些信息的首选方式。 目前是IIRC hal和dbus。 也许SUN不希望在每次更改时都发布一个新的Java版本。

如果纯Java不能削减它,也许你可以使用一点jni(如果你使用像JNA这样的工具,就不那么难用了)直接访问linux apis。 我没有这样做,但可以尝试,如果你有兴趣。