Вы не можете сделать это на чистой Java.
Вы, вероятно, также не можете сделать это в C / C ++ ... если только вы не запускаете привилегированное приложение, которое может получить доступ к "необработанному" файлу устройства в Linux (или аналоге Windows).
И даже в этом случае вам потребуется реализовать целый стек кода, который понимает структуру файловой системы на уровне дискового блока и может выполнять все вычисления.
И эти вычисления намного, намного сложнее, чем предполагает ваш вопрос. Существует несколько форматов файловых систем, с которыми необходимо работать, а затем сопоставления номеров блоков виртуальных дисков с уровнем адресации физического диска / диска / дорожки / сектора.
И даже когда вы достигнете этого, вы не сможете использовать эту информацию ни для чего:
Было бы опасно пытаться записывать файлы, используя адреса физических дисков. Одна ошибка, и вы уничтожили файловую систему. (На самом деле, это невозможно сделать безопасно, если вы сначала не размонтируете файловую систему ... потому что ваше приложение никак не может скоординировать действия ОС).
Даже чтение было бы трудно сделать надежно, потому что ОС может записывать в файл во время чтения, и это может изменить адрес диска содержимого файла.