有没有一种方法可以判断驱动器是DVD/CD/蓝光驱动器而不需要插入光盘?

4

在查看这个问题:如何在Java中获取所有DVD驱动器后,我发现在JAVA 7中有一种方法可以区分硬盘和带CD / DVD驱动器的驱动器,但是该方法在驱动器为空时失败。

我的问题是:现在四年过去了,是否有一种方法可以区分哪些驱动器是硬盘,哪些是CD / DVD / Blu-ray驱动器,即使这些驱动器没有CD / DVD / Blu-ray?

编辑: 此目标操作系统为Linux


@关闭投票者 我期望至少有一些评论说明为什么要关闭。我唯一能想到的可能性是你认为这个问题是我在问题中提到的一个问题的重复。尽管我已经清楚地表明了我认为这个问题与那个问题有何不同,因为我正在询问是否在过去4年中(和新版本)解决了一个看似的弱点(至少如果我正确理解了对那一个的回答是一个弱点)。所以关闭投票背后的原因会很有趣。谢谢。 - Thomas
答案仍然取决于操作系统。你的目标操作系统是哪一个? - BalusC
啊,好观点。我曾经认为跨平台是可能的,但是重新阅读后,我会在那里更新我的问题。目标操作系统是Linux。 - Thomas
你尝试过java-avm吗?http://java-avm.sourceforge.net/ - andrucz
之前没看到过这个。 - Thomas
2个回答

2

您能运行系统命令吗,还是必须使用纯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或类似的内容。


我花了一点时间才明白这个程序的作用。所以它只显示CDROM驱动器(不错!)。如果安装了两个驱动器,它是否也能很好地工作?另外,由于它是dev/cdrom/info,它是否也适用于蓝光驱动器?(在输出中只看到了DVD/CD)它是否仅限于特定的Linux版本或是通用程序? - Thomas
我已经修改了我的答案,加入了有关蓝光驱动器的信息。这两个命令应该在每个Linux系统中都存在(我已经在SLES、CentOS进行了本地测试,但我知道Ubuntu也有它们)。 - Fallso
有趣的,谢谢。我现在会点赞并等待几天,看是否有其他更好的选项(否则我会接受这个)。 - Thomas

0

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

请注意,紧凑型驱动器速度较慢,并且不支持Mount Rainier数据包写入(MRW)。还要注意,这些驱动器被列为支持DVD-R(读作“DVD破折号R”;不存在“DVD减R”),但没有行指示它们是否支持DVD+R(“DVD加R”)。很可能至少有一个驱动器支持DVD+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

现在我们看到了一些重要的点,你可能会说,“哦,那个。” 是的,就是那个。哦,DVD-R和DVD-RW之间的格式战争。哦,双层光盘。哦,DVD-RAM。哦,带有多碟杂志的CD换碟器(“可以选择磁盘”)。

我稍后会尝试从BD-ROM驱动器中提取数据并更新此内容。但总的来说,您可能需要以几种不同的方式对系统进行询问才能获得完整的结果。

媒体检查进一步复杂了这个问题。特别是,试图区分有缺陷的光盘、空白光盘、在该特定驱动器中无法工作的有效光盘、开放式托盘和其他各种条件可能需要熟悉向设备发送低级IOCTL命令。这可以用任何语言完成,但对于没有编写过一些C系统软件的人来说,它往往感觉非常陌生。


哦——上面的内容来自 Fedora 29,供您参考。 - breakpoint

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接