在java中识别磁盘类型的文件系统格式,如ntfs,fat16 / 32或ext

有没有办法在java中找出磁盘的文件系统格式?

例如对于Windows硬盘驱动器它可能是NTFS,对于zip驱动器它是FAT32。

注意这仅适用于在Windows系统上运行的Java:

使用JNA,您可以调用Win32 Kernel32的GetVolumeInformation()来检索receives the name of the file system, for example, the FAT file system or the NTFS file system lpFileSystemNameBuffer参数receives the name of the file system, for example, the FAT file system or the NTFS file system http://msdn.microsoft.com/en-us/库/窗/桌面/ aa364993(v = vs.85)的.aspx

Kernel32.java

 package filesystem; import java.util.HashMap; import java.util.Map; import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.platform.win32.WinDef.DWORD; import com.sun.jna.ptr.IntByReference; import com.sun.jna.win32.StdCallLibrary; import com.sun.jna.win32.W32APIFunctionMapper; import com.sun.jna.win32.W32APITypeMapper; public interface Kernel32 extends StdCallLibrary { final static Map WIN32API_OPTIONS = new HashMap() { private static final long serialVersionUID = 1L; { put(Library.OPTION_FUNCTION_MAPPER, W32APIFunctionMapper.UNICODE); put(Library.OPTION_TYPE_MAPPER, W32APITypeMapper.UNICODE); } }; public Kernel32 INSTANCE = (Kernel32) Native.loadLibrary("Kernel32", Kernel32.class, WIN32API_OPTIONS); /* BOOL WINAPI GetVolumeInformation( __in_opt LPCTSTR lpRootPathName, __out LPTSTR lpVolumeNameBuffer, __in DWORD nVolumeNameSize, __out_opt LPDWORD lpVolumeSerialNumber, __out_opt LPDWORD lpMaximumComponentLength, __out_opt LPDWORD lpFileSystemFlags, __out LPTSTR lpFileSystemNameBuffer, __in DWORD nFileSystemNameSize ); */ public boolean GetVolumeInformation( String lpRootPathName, char[] lpVolumeNameBuffer, DWORD nVolumeNameSize, IntByReference lpVolumeSerialNumber, IntByReference lpMaximumComponentLength, IntByReference lpFileSystemFlags, char[] lpFileSystemNameBuffer, DWORD nFileSystemNameSize ); public int GetLastError(); } 

VolumeInformation.java

 package filesystem; import ping.Kernel32; import com.sun.jna.platform.win32.WinDef.DWORD; import com.sun.jna.ptr.IntByReference; public class VolumeInformation { static void getFileSystemName(){ char[] lpVolumeNameBuffer = new char[256]; DWORD nVolumeNameSize = new DWORD(256); IntByReference lpVolumeSerialNumber = new IntByReference(); IntByReference lpMaximumComponentLength = new IntByReference(); IntByReference lpFileSystemFlags = new IntByReference(); char[] lpFileSystemNameBuffer = new char[256]; DWORD nFileSystemNameSize = new DWORD(256); lpVolumeSerialNumber.setValue(0); lpMaximumComponentLength.setValue(256); lpFileSystemFlags.setValue(0); Kernel32.INSTANCE.GetVolumeInformation( "C:\\", lpVolumeNameBuffer, nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize); System.out.println("Last error: "+Kernel32.INSTANCE.GetLastError()+"\n\n"); String fs = new String(lpFileSystemNameBuffer); System.out.println(fs.trim()); } /** * @param args */ public static void main(String[] args) { getFileSystemName(); } } 

您使用的是哪个版本的Java?

如果是Java 7 – 请查看此API – http://docs.oracle.com/javase/7/docs/api/java/nio/file/FileSystems.html

除此之外,我知道System.getProperty和Runtime有方法来获取正在使用的磁盘上的信息,但没有任何特别调用文件系统类型的信息(NTFS,FAT32等)