Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中标识磁盘类型的文件系统格式,如ntfs、fat16/32或ext_Java_Filesystems - Fatal编程技术网

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

在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

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


例如,对于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等)的方法