Java 获取分区和卷信息

Java 获取分区和卷信息,java,disk-partitioning,Java,Disk Partitioning,是否有办法仅使用Java库获取磁盘分区和卷信息?我还需要删除的文件信息。磁盘格式化为FAT-16,并具有标准MBR 我需要以下资料: a) 分区信息-显示磁盘上的分区数以及每个分区的分区数 分区显示起始扇区、分区大小和文件系统类型 b) 卷信息–仅对于第一个分区,显示每个分区的扇区数 集群、FAT区域的大小、根目录的大小和扇区地址 第二类 c) 已删除文件信息-对于卷根目录上的第一个已删除文件, 显示该文件的名称和大小,以及第一个群集的编号。显示 该文件内容的前16个字符(假设它是一个简单的文本

是否有办法仅使用Java库获取磁盘分区和卷信息?我还需要删除的文件信息。磁盘格式化为FAT-16,并具有标准MBR

我需要以下资料:

a) 分区信息-显示磁盘上的分区数以及每个分区的分区数 分区显示起始扇区、分区大小和文件系统类型

b) 卷信息–仅对于第一个分区,显示每个分区的扇区数 集群、FAT区域的大小、根目录的大小和扇区地址 第二类

c) 已删除文件信息-对于卷根目录上的第一个已删除文件, 显示该文件的名称和大小,以及第一个群集的编号。显示 该文件内容的前16个字符(假设它是一个简单的文本文件)。

如果需要尝试此操作:

import javax.swing.*;
import java.awt.*;
import java.awt.Color;
import java.awt.event.*;
import java.io.File;
import javax.swing.filechooser.FileSystemView;

public class Main {

    public static void main(String[] args) {

        System.out.println("File system roots returned byFileSystemView.getFileSystemView():");
        FileSystemView fsv = FileSystemView.getFileSystemView();
        File[] roots = fsv.getRoots();
        for (int i = 0; i < roots.length; i++) {
            System.out.println("Root: " + roots[i]);
        }

        System.out.println("Home directory: " + fsv.getHomeDirectory());

        System.out.println("File system roots returned by File.listRoots():");
        File[] f = File.listRoots();
        for (int i = 0; i < f.length; i++) {
            System.out.println("Drive: " + f[i]);
            System.out.println("Display name: " + fsv.getSystemDisplayName(f[i]));
            System.out.println("Is drive: " + fsv.isDrive(f[i]));
            System.out.println("Is floppy: " + fsv.isFloppyDrive(f[i]));
            System.out.println("Readable: " + f[i].canRead());
            System.out.println("Writable: " + f[i].canWrite());
            System.out.println("Total space: " + f[i].getTotalSpace());
            System.out.println("Usable space: " + f[i].getUsableSpace());
        }
    }
}
import javax.swing.*;
导入java.awt.*;
导入java.awt.Color;
导入java.awt.event.*;
导入java.io.File;
导入javax.swing.filechooser.FileSystemView;
公共班机{
公共静态void main(字符串[]args){
System.out.println(“FileSystemView.getFileSystemView()返回的文件系统根:”;
FileSystemView fsv=FileSystemView.getFileSystemView();
文件[]根=fsv.getRoots();
for(int i=0;i
引自:

使用JNA,您可以调用Win32 Kernel32的GetVolumeInformation()来 检索lpFileSystemNameBuffer参数,该参数接收 文件系统,例如FAT文件系统或NTFS文件系统 系统


谢谢,但这不是我需要的。我在顶部编辑了我的文章,以便您现在可以看到我想要获得的详细信息。您的答案只适用于每个分区使用单独根目录的系统,因此它在任何类似Unix的系统(包括Linux和MacOSX:唯一根目录是
/
)或更新的Windows上都不起作用(虽然大多数分区都有自己的根,但其中一些分区可以作为目录装入)。显然,它们希望您对分区表、BIOS参数块和根目录执行原始读取。