Я пытаюсь использовать следующий код для доступа к одному байту со смещением 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?
RandomAcceSsFile не предназначен для открытия каталогов для манипулирования записями, вам нужно создавать или удалять файлы. «Acceso Denegado», вероятно, средний доступ запрещен. Для этого в любом случае вам нужен JNI.
Редактировать: что вы пытаетесь сделать, действительно сложно, нет общего способа сделать это. Вы можете получить доступ к сектору HardDisc по сектору, но тогда вам придется интерпретировать его структуру, что, очевидно, зависит от файловой системы, жира, NTFS, HPF и т. Д.
Под Linux вы можете попробовать открыть / dev /
, E.g. / dev / HDA
, или / dev / sdb2
. Это даст вам доступ к необработанному диску (или только разбиению), но требует, чтобы у вас были соответствующие права - «нормальный» пользователь не имеет их, хотя.
В Unix вы можете прочитать / писать из / dev
файлов. (Я не уверен)
В Windows, я думаю, вам нужно прочитать / писать дисковые секторы через JNI (родной интерфейс Java). Призывает некоторую библиотеку C поговорить с ОС.
Обновление: в библиотеке C, возможно, вам может потребоваться использовать Win32API, чтобы получить дескриптор файла CreateFile (..)
Функция.
Java имеет доступ только к файлам. В Unix есть концепция «сырых устройств» в виде файлов в каталоге / dev, так что там возможно все, что вы хотите. Но не в Windows, потому что у него нет такого файлового представления необработанных данных HD.
В Windows необходимо получить доступ к необработанному идентификатору устройства в виде файла. Он должен работать, если вы передадите файл "\\. \ C:", вы используете UNC-имя устройства \. \ C: (\. Означает этот компьютер).
В Vista и более поздних версиях я не думаю, что он будет работать правильно, поскольку существуют механизмы, предотвращающие прямой доступ к диску для чего-либо, кроме драйверов устройств (не цитируйте меня по этому поводу)
{{1 }}