在查看这个问题:如何在Java中获取所有DVD驱动器后,我发现在JAVA 7中有一种方法可以区分硬盘和带CD / DVD驱动器的驱动器,但是该方法在驱动器为空时失败。
我的问题是:现在四年过去了,是否有一种方法可以区分哪些驱动器是硬盘,哪些是CD / DVD / Blu-ray驱动器,即使这些驱动器没有CD / DVD / Blu-ray?
编辑: 此目标操作系统为Linux
在查看这个问题:如何在Java中获取所有DVD驱动器后,我发现在JAVA 7中有一种方法可以区分硬盘和带CD / DVD驱动器的驱动器,但是该方法在驱动器为空时失败。
我的问题是:现在四年过去了,是否有一种方法可以区分哪些驱动器是硬盘,哪些是CD / DVD / Blu-ray驱动器,即使这些驱动器没有CD / DVD / Blu-ray?
编辑: 此目标操作系统为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
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系统软件的人来说,它往往感觉非常陌生。