在java中标识磁盘类型的文件系统格式,如ntfs、fat16/32或ext
在java中有没有办法找到磁盘的文件系统格式在java中标识磁盘类型的文件系统格式,如ntfs、fat16/32或ext,java,filesystems,Java,Filesystems,在java中有没有办法找到磁盘的文件系统格式 例如,对于windows硬盘驱动器,它可能是NTFS,对于zip驱动器,它是FAT32。N.B.这仅对在windows系统上运行的Java有效: 使用JNA,您可以调用Win32 Kernel32的GetVolumeInformation()来检索lpFileSystemNameBuffer参数,该参数接收文件系统的名称,例如FAT文件系统或NTFS文件系统 Kernel32.java: package filesystem; import ja
例如,对于windows硬盘驱动器,它可能是NTFS,对于zip驱动器,它是FAT32。N.B.这仅对在windows系统上运行的Java有效: 使用JNA,您可以调用Win32 Kernel32的GetVolumeInformation()来检索lpFileSystemNameBuffer参数,该参数
接收文件系统的名称,例如FAT文件系统或NTFS文件系统
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);
/*
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();
}
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- 除此之外,我知道System.getProperty和Runtime都有方法获取所用磁盘上的信息,但没有专门调用文件系统类型(NTFS、FAT32等)的方法