【问题标题】:Enumerating attached DVD drives in Linux / Java / Scala在 Linux / Java / Scala 中枚举附加的 DVD 驱动器
【发布时间】:2010-10-21 05:09:17
【问题描述】:

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

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

不确定是否可以获得光盘的名称,但路径对我来说很重要。

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

提前致谢!

【问题讨论】:

    标签: java linux scala dvd


    【解决方案1】:

    有一种(未经测试的)可能性可以让您的驱动器使用纯 Java 代码。至少在 Windows 上。

    它有点 hacky 并且不能在 linux 下工作(因为我相信 linux 并没有从 sun 那里得到太多的集成)。

    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 api。我没做过,有兴趣可以试试。

    【讨论】:

      【解决方案2】:

      我认为您对 java.io.* 不走运,但如果您不介意调用 Linux 命令,您可以通过以下方式组装数据:

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

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

      【讨论】:

        猜你喜欢
        • 2014-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-30
        • 2011-10-25
        • 1970-01-01
        • 1970-01-01
        • 2013-12-31
        相关资源
        最近更新 更多