Java:如何确定文件所在的驱动器类型?

mst*_*rap 10 java drive

Java是否存在与平台无关的方式来检测文件所在的驱动器类型?基本上我有兴趣区分:硬盘,可移动驱动器(如USB棒)和网络共享.JNI/JNA解决方案没有帮助.可以假设Java 7.

McD*_*eam 5

您可以使用Java使用以下命令执行cmd:

fsutil fsinfo drivetype {drive letter}
Run Code Online (Sandbox Code Playgroud)

结果将为您提供以下信息:

C: - Fixed Drive
D: - CD-ROM Drive
E: - Removable Drive
P: - Remote/Network Drive
Run Code Online (Sandbox Code Playgroud)

  • 它与平台无关,甚至fsutil似乎都需要管理特权。 (4认同)

Jon*_*oni 4

FileSystemViewSwing 中的类具有一些支持检测驱动器类型的功能(参见isFloppyDrive, isComputerNode)。恐怕没有标准方法来检测驱动器是否通过 USB 连接。

人为的、未经测试的示例:

import javax.swing.JFileChooser;
import javax.swing.filechooser.FileSystemView;
....
JFileChooser fc = new JFileChooser();
FileSystemView fsv = fc.getFileSystemView();
if (fsv.isFloppyDrive(new File("A:"))) // is A: a floppy drive? 
Run Code Online (Sandbox Code Playgroud)

在 JDK 7 中还有另一种选择。我没用过,不过FileStoreAPI有type方法。文档说

此方法返回的字符串的格式是高度特定于实现的。例如,它可以指示所使用的格式或者文件存储是本地还是远程。

显然使用它的方法是这样的:

import java.nio.*;
....
for (FileStore store: FileSystems.getDefault().getFileStores()) {
    System.out.printf("%s: %s%n", store.name(), store.type());
} 
Run Code Online (Sandbox Code Playgroud)

  • FileSystemView.isFloppyDrive() 是由“path.equals("A:\\")”之类的东西实现的,不幸的是,这没有帮助。另外,我发现 FileStore.type() 没有帮助。它为我的网络共享返回“NTFS”。 (4认同)
  • 对于 Windows 7、Java 7 上的网络驱动器,FileStore#type() 返回“NTFS”。 (3认同)