Как получить доступ к определенным необработанным данным по диску от Java

Я пытаюсь использовать следующий код для доступа к одному байту со смещением 50 байтов в неструктурированном диске.

randomAccessFile = new RandomAccessFile("C:", "r");
randomAccessFile.seek(50);
byte[] buffer = new byte[1];
randomAccessFile.read(buffer);

Но все, что я получаю, являются следующей ошибкой:

java.io.FileNotFoundException: C: (Acceso denegado)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:212)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:98)
at pru.lseek.main(lseek.java:26)

Там какой-либо путь состоит в том, чтобы получить доступ к точному байту в диске от Java?

17
задан user178973 21 January 2010 в 10:10
поделиться

5 ответов

RandomAcceSsFile не предназначен для открытия каталогов для манипулирования записями, вам нужно создавать или удалять файлы. «Acceso Denegado», вероятно, средний доступ запрещен. Для этого в любом случае вам нужен JNI.

Редактировать: что вы пытаетесь сделать, действительно сложно, нет общего способа сделать это. Вы можете получить доступ к сектору HardDisc по сектору, но тогда вам придется интерпретировать его структуру, что, очевидно, зависит от файловой системы, жира, NTFS, HPF и т. Д.

4
ответ дан 30 November 2019 в 11:44
поделиться

Под Linux вы можете попробовать открыть / dev / , E.g. / dev / HDA , или / dev / sdb2 . Это даст вам доступ к необработанному диску (или только разбиению), но требует, чтобы у вас были соответствующие права - «нормальный» пользователь не имеет их, хотя.

3
ответ дан 30 November 2019 в 11:44
поделиться

В Unix вы можете прочитать / писать из / dev файлов. (Я не уверен)

В Windows, я думаю, вам нужно прочитать / писать дисковые секторы через JNI (родной интерфейс Java). Призывает некоторую библиотеку C поговорить с ОС.

Обновление: в библиотеке C, возможно, вам может потребоваться использовать Win32API, чтобы получить дескриптор файла CreateFile (..) Функция.

https://metacpan.org/pod/win32api::file

http://jan.newmarch.name/ssw/files/win32.html

1
ответ дан 30 November 2019 в 11:44
поделиться

Java имеет доступ только к файлам. В Unix есть концепция «сырых устройств» в виде файлов в каталоге / dev, так что там возможно все, что вы хотите. Но не в Windows, потому что у него нет такого файлового представления необработанных данных HD.

1
ответ дан 30 November 2019 в 11:44
поделиться

В Windows необходимо получить доступ к необработанному идентификатору устройства в виде файла. Он должен работать, если вы передадите файл "\\. \ C:", вы используете UNC-имя устройства \. \ C: (\. Означает этот компьютер).

В Vista и более поздних версиях я не думаю, что он будет работать правильно, поскольку существуют механизмы, предотвращающие прямой доступ к диску для чего-либо, кроме драйверов устройств (не цитируйте меня по этому поводу)

{{1 }}
1
ответ дан 30 November 2019 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: