【问题标题】:How to read disk partition in java如何在java中读取磁盘分区
【发布时间】:2014-03-25 14:12:37
【问题描述】:

是否可以在java中读取整个磁盘分区?

分区被视为目录(显然),因此我无法创建我需要的 FileInputStream。

我想计算整个磁盘分区的哈希值(逐字节),我想知道如何实现。

如果这很重要,它必须同时在 Windows 和 Linux 上运行。

感谢任何想法!

【问题讨论】:

  • 您可以在 unix 上通过读取原始设备来执行此操作,例如/dev/sd1c windows 可能有一个等价物。
  • @PeterLawrey 谢谢,这应该适用于 linux,但我仍然无法在 Windows 上找到等效的解决方案。
  • @Vishrant 我认为这不相关,我需要逐字节读取分区,而不仅仅是获取有关它的信息。
  • 为了好奇,为什么要这样读取分区,为什么不获取文件列表并读取它。

标签: java


【解决方案1】:

用管理员权限试试:

File diskRoot = new File ("\\.\X:"); //X is your requested partition's letter 
RandomAccessFile diskAccess = new RandomAccessFile(diskRoot, "r");
byte[] content = new byte[1024];
diskAccess.readFully (content);

您也可以使用 BufferedInputStream。这是来自How to access specific raw data on disk from java的hunsricker的回答

可以在此处找到命名约定:http://support.microsoft.com/kb/100027

【讨论】:

  • 感谢您的提示 - 特别是对于 Windows 中的命名约定 - 帮助很大!事实上,这并没有奏效,因为 RandomAccesFile#read()、readFully() 和其他读取函数会抛出 java.io.Exception: Parameter is invalid。但我只使用 InputStream (下面的解决方案)。
【解决方案2】:

正如@Michal 建议的那样,我已将分区路径更改为“\\.\X:”约定。

代码如下:

File diskRoot = new File("\\\\.\\F:");
byte[] buffer = new byte[1024];
try (InpuStream stream = new FileInputStream(diskRoot)) {
    while(stream.read(buffer) != -1) {
        //do something with buffer
    }
} catch(IOException e) {
    //handle exception
}

感谢cmets和答案!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-17
    • 2021-06-05
    • 2023-03-23
    • 2020-10-11
    • 1970-01-01
    • 2015-01-05
    • 2011-01-09
    相关资源
    最近更新 更多