有没有办法辨别驱动器是否是 dvd/cd/blueray 驱动器,里面没有光盘?

Is there a way to discern if a drive is a dvd/cd/blueray drive without a disc inside?

在这里查看这个问题后:Get all DVD drives in Java

在我看来,使用 JAVA 7 时,当驱动器内部有 cd/dvd 时,有一种方法可以区分硬盘驱动器和 dvd/cd 驱动器。但如果驱动器为空,则该方法失败。

我的问题是:现在 4 年后是否有一种方法可以辨别哪些驱动器是硬盘驱动器,哪些是 cd/dvd/blueray 驱动器,即使这些驱动器没有 cd/dvd/blueray里面?

编辑: 目标 OS 是 Linux

你可以 运行 系统命令,还是必须是纯粹的 Java?如果可以运行个系统命令,试试:

Runtime.getRuntime().exec("more /proc/sys/dev/cdrom/info");

这会给你这样的东西:

CD-ROM information, Id: cdrom.c 3.20 2003/12/17

drive name:     sr0
drive speed:        24
drive # of slots:   1
Can close tray:     1
Can open tray:      1
Can lock tray:      1
Can change speed:   1
Can select disk:    0
Can read multisession:  1
Can read MCN:       1
Reports media changed:  1
Can play audio:     1
Can write CD-R:     1
Can write CD-RW:    1
Can read DVD:       1
Can write DVD-R:    1
Can write DVD-RAM:  1
Can read MRW:       1
Can write MRW:      1
Can write RAM:      1

如需更全面的信息,您可以运行:

Runtime.getRuntime().exec("hwinfo --cdrom");

里面应该有这样一行:

Feature: CD-R, CD-RW, DVD-R, DVDRAM

如果您的系统中有蓝光驱动器,我希望是 BDROM、BD-ROM、BD-R、BD-RW 或类似的东西

hwinfo --cdrom 将提供比 /proc/sys/dev/cdrom/info.

更完整的信息

这里是一个系统示例,该系统具有内置 DVD-RW 驱动器、外置紧凑型 DVD-RW 驱动器和外置全尺寸 DVD-RW 驱动器。请注意 /proc/sys/dev/cdrom/info 的一个重要解析细节:它为多个设备添加列,而不是块。还要注意第一行,这表明它所依赖的代码是很久以前写的:

CD-ROM information, Id: cdrom.c 3.20 2003/12/17

drive name:         sr2 sr1 sr0
drive speed:        48  8   40
drive # of slots:   1   1   1
Can close tray:     1   1   1
Can open tray:      1   1   1
Can lock tray:      1   1   1
Can change speed:   1   1   1
Can select disk:    0   0   0
Can read multisession:  1   1   1
Can read MCN:       1   1   1
Reports media changed:  1   1   1
Can play audio:     1   1   1
Can write CD-R:     1   1   1
Can write CD-RW:    1   1   1
Can read DVD:       1   1   1
Can write DVD-R:    1   1   1
Can write DVD-RAM:  1   1   1
Can read MRW:       1   0   1
Can write MRW:      1   0   1
Can write RAM:      1   1   1

请注意,紧凑型驱动器速度较慢,并且不支持雷尼尔山数据包写入 (MRW)。另请注意,这些驱动器被列为支持 DVD-R(阅读:"DVD dash R";没有 "DVD minus R" 之类的东西),但没有行表明它们是否支持 DVD+R( "DVD plus R")。这些驱动器中至少有一个可能会。

使用 "hwinfo --cdrom" 获取更多信息,这是其匹配的特征行(更多数据可用;为简洁明了,此处将其删除:

Features: CD-R, CD-RW, DVD, DVD-R, DVD-RW, DVD-R DL, DVD+R, DVD+RW, DVD+R DL, DVD-RAM, MRW, MRW-W
Features: CD-R, CD-RW, DVD, DVD-R, DVD-RW, DVD-R DL, DVD+R, DVD+RW, DVD+R DL, DVD-RAM
Features: CD-R, CD-RW, DVD, DVD-R, DVD-RW, DVD-R DL, DVD+R, DVD+RW, DVD+R DL, DVD-RAM, MRW, MRW-W

我们现在看到了一些重要的观点,您可能会说,"Oh, that." 是的,哦那个。哦,那个介于 DVD-R 和 DVD-RW 之间的格式 war。哦,双层光盘。哦,DVD-RAM。哦,带有多碟杂志的 CD 换片机 ("can select disk")。

稍后我会看看是否可以从 BD-ROM 驱动器中提取数据并进行更新。但结果是您可能不得不通过几种不同的方式询问系统以获得完整的结果。

媒体检查使事情变得更加复杂。特别是,试图区分有缺陷的光盘、空白光盘、不能在特定驱动器中工作的有效光盘、打开的托盘以及各种其他情况可能需要熟悉发送低级 IOCTL命令到设备。这几乎可以用任何语言来完成,但对于没有用 C 编写过一些系统 software 的人来说,它往往感觉很陌生。