【问题标题】:How to determinate if 2 logical drives are on the same physical disc in Java如何确定 2 个逻辑驱动器是否在 Java 中的同一物理磁盘上
【发布时间】:2019-08-09 07:14:28
【问题描述】:

想象一台带有 SSD 和 HDD 的 PC。

SSD 分为 2 个分区:C 和 D。

硬盘分为 2 个分区:E 和 F。

我需要创建一个方法:

boolean isOnSamePhysicalDrive(String drive1, String drive2);

isOnSamePhysicalDrive("C", "D") -->

isOnSamePhysicalDrive("E", "F") -->

isOnSamePhysicalDrive("C", "E") -->

【问题讨论】:

  • 我认为答案应该只是 windows,因为您使用的是 windows 硬盘名称?
  • 是的,它仅适用于 Windows
  • 您是否尝试过以与此解决方案类似的方式在stackoverflow.com/questions/327718/how-to-list-physical-disks 的倒数第二个位置访问注册表?
  • 如果您在拥有 powershell this 的系统上运行程序,可能是一种方法。除了executing-powershell-commands-in-java.
  • 更接近,但有一个问题:我的笔记本电脑当前具有以下设置:SSD 上的 CEF 驱动器、HDD 上的 DGH 驱动器和外置 HDD 上的 I。当我运行命令 'powershell.exe Get-Disk (Get-Partition -DriveLetter 'H').DiskNumber' 时,它会打印 DGH 驱动器的错误。也许是因为 HDD 是动态磁盘?

标签: java hard-drive


【解决方案1】:

Java.nio.file.FileStore 就是您要找的。​​p>

https://docs.oracle.com/javase/7/docs/api/java/nio/file/FileStore.html

文件存储。 FileStore 代表存储池、设备、 分区、卷、具体文件系统或其他实现 文件存储的具体方式。

此代码在执行时打印我的分区名称。

for (FileStore fs: FileSystems.getDefault().getFileStores()) {
    System.out.println("Name: " + fs.name());
    System.out.println("Type: " + fs.type());
}

这样

Name: SSD
Type: NTFS
Name: Door systeem gereserveerd
Type: NTFS
Name: 
Type: NTFS

请注意,Door systeem gereserveerd 是我的主驱动器 SSD 的一个分区。请原谅荷兰语。

Lokale schijf 表示Local drive .磁盘未命名,这就是结果中没有显示名称的原因。

更具体地说,您可以使用它。

System.out.println(Files.getFileStore(Paths.get("C:/")).name());
System.out.println(Files.getFileStore(Paths.get("E:/")).name());

将打印特定驱动器或分区的名称。就我而言:

SSD
Door systeem gereserveerd

【讨论】:

  • FileSystems.getDefault().getFileStores().forEach(fileStore -> System.out.println(fileStore.name() + " - " + fileStore.type())); 返回 Windows - NTFS HDD Programs - NTFS SSD Prog - NTFS Develop - NTFS Torrent - NTFS Storage - NTFS ext_storage - NTFS 对我来说,但是这些驱动器发生在 3 个物理驱动器(SSD、 HDD,外置硬盘),我看不到物理/逻辑驱动器的映射
  • 看来getAttribute(String attribute) 是我们需要使用的。但是,我无法找到有关 FileStore 属性的文档。
  • getAttribute 支持值:totalSpace、usableSpace、unallocatedSpace、volume:vsn、volume:isRemovable 和 volume:isCdrom for Concrete class WindowsFileStore
猜你喜欢
  • 1970-01-01
  • 2012-07-13
  • 2018-12-22
  • 2021-08-31
  • 2019-03-11
  • 1970-01-01
  • 2012-04-11
  • 2020-04-21
  • 1970-01-01
相关资源
最近更新 更多