Вау, это на самом деле сложнее, чем я представлял!
Чтобы обосновать это в Linux, вы ищете поле st_mode
из системного вызова stat()
(в C -Мир). Его различные значения указывают, является ли файл символьным устройством, блочным устройством, каталогом и т. Д. c ... Первый символ в каждой строке возврата из ls -la
представляет это поле: b
для блочного устройства, d
для каталога, -
для обычного файла и т. д. Например, если вы запустите ls -la /dev/sda
, вы, вероятно, получите что-то вроде brw-rw---- 1...
, потому что sda
- это блочное устройство. Первая строка ls -la /opt
будет dr-xr-xrx...
, поскольку opt
- это каталог.
(https://linux.die.net/man/2/stat, для справки)
Ковырять в Javadocs , Я не нашел класса файла, который разрешает прямой доступ к этому полю st_mode
. Как вы упомянули, существуют способы определить, является ли файл каталогом, файлом или другим, но этого недостаточно, чтобы различать guish между всеми параметрами и выяснить, является ли это блочным устройством.
Я нашел этот проект , который, похоже, позволяет вам получить эту stat()
структуру в Java. Это изрядно накладные расходы. Возможно, вам удастся извлечь фрагменты, необходимые для этого приложения, но это может быть нетривиально. Специфический метод c, который вам нужно вызвать, - это isBlockDev()
Надеюсь, что это немного поможет, любопытно посмотреть, поймете ли вы что-то или есть лучший ответ там!