3

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

我需要以下信息:

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

b)卷信息——仅对于第一个分区,显示每个簇的扇区数、FAT 区域的大小、根目录的大小以及簇#2 的扇区地址。

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

4

2 回答 2

3

如果您需要在 Java 中获取文件系统详细信息,请尝试以下操作:

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());
        }
    }
}

从这个答案中引用:

使用JNA,你可以调用Win32 Kernel32的GetVolumeInformation()来获取接收文件系统名称的lpFileSystemNameBuffer参数,例如FAT文件系统或NTFS文件系统

于 2013-03-27T10:09:05.473 回答
-1

您可以获得以 GB 或 MB 为单位的分区大小

长GB=1024 * 1024 * 1024;

除以分区的实际大小 System.out.println("总空间:" + f[i].getTotalSpace()/gb+"GB"); System.out.println("可用空间:" + f[i].getUsableSpace()/gb+"GB");

于 2022-02-04T18:38:18.857 回答