注意:这仅对在Windows系统上运行的Java有效:
使用JNA,您可以调用Win32 Kernel32的 GetVolumeInformation() 来检索
lpFileSystemNameBuffer 参数,该参数
receives the name of the file system, forexample, the FAT file system or the NTFS file system
http://msdn.microsoft.com/zh-
cn/library/windows/desktop/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<String, Object> WIN32API_OPTIONS = new HashMap<String, Object>() { 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); 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()+"nn"); String fs = new String(lpFileSystemNameBuffer); System.out.println(fs.trim()); } public static void main(String[] args) { getFileSystemName(); }}


