gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:57:31 26 4
gpt4 key购买 nike

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

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

最佳答案

注意这只对在Windows系统上运行的Java有效:

使用 JNA,您可以调用 Win32 Kernel32 的 GetVolumeInformation() 来检索 lpFileSystemNameBuffer 参数,该参数接收文件系统的名称,例如 FAT 文件系统或 NTFS 文件系统 http://msdn.microsoft.com/en-us/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);

/*
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 中识别磁盘类型的文件系统格式,如 ntfs、fat16/32 或 ext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com