2013-03-27 36 views
2

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

我需要以下信息:

一个)分区信息 - 显示在盘上的分区数和每个 分区显示起始扇区,分区和文件系统类型的大小。

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

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

+0

显然,他们期望您执行分区表,BIOS参数块和根目录的原始读取。 – 2013-11-07 00:39:45

回答

1

如果需要Getting file system details in 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()); 
     } 
    } 
} 

this answer引用:使用JNA

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

+0

谢谢,但这不完全是我需要的。我在顶部编辑了我的帖子,所以你现在可以看到我想要得到的细节。 – Scadge 2013-03-27 10:37:26

+2

你的答案只适用于每个分区使用不同的根目录的系统,所以它不适用于任何类Unix系统(包括Linux和MacOSX:只有根目录是/)或在较新的Windows上(而大多数分区有他们自己的根,其中一些可以作为目录装载)。 – 2014-08-14 11:00:15