2013-03-27 77 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