Ответ 1
Файл - это файл, я согласен с "Joachim Pileborg", что программа Java не получила файл в своем рабочем каталоге. Попробуйте
String working dir = System.getProperty("user.dir");
и убедитесь, что файл находится в правильном пути.
У меня есть программа на С++, которая использует в одной точке
hMapFile = OpenFileMapping(dwDesiredAccess, bInheritHandle, lpName);
lpName
- это что-то вроде "myfile"
без расширений или путей, то есть файла с отображением памяти. Я могу найти файл с WinObj-браузером (WinObj) в пути Sessions\1\BaseNamedObjects\myfile
. Если я попытаюсь прочитать этот конкретный файл на Java, я попробовал
File file = new File("myfile");
FileChannel filechannel = new RandomAccessFile(file, "r").getChannel();
MappedByteBuffer buffer = filechannel.map(FileChannel.MapMode.READ_ONLY, 0, filechannel.size());
Но я получаю всегда ту же ошибку: не могу найти указанный файл в команде RandomAccessFile
. Может быть, нужен другой доступ к файлам? Какой?
Как я понимаю другими сообщениями, они всегда используют путь и расширение, однако я не знаю, что путь и расширение будут в моем случае...
Что я ищу, я получаю доступ к пространства имен объектов ядрa > пространства имен объектов ядра
Я знаю, что есть пример JNI (Memorymap с использованием JNI), однако я хотел бы сохранить его простым и использовать nio
( если возможно).
UPDATE
Итак, я просто попробовал все это на С#, и это было смешно легко, не взяло меня более 5 строк кода.
Файл - это файл, я согласен с "Joachim Pileborg", что программа Java не получила файл в своем рабочем каталоге. Попробуйте
String working dir = System.getProperty("user.dir");
и убедитесь, что файл находится в правильном пути.
Вам нужно использовать CreateFileMapping
вместо OpenFileMapping
. Таким образом, вы создадите фактический файл на диске, который связан с сопоставлением файлов.
Примечание. Важно заметить, что использование обычных методов чтения/записи НЕ будет синхронизироваться с сопоставлением файлов другого процесса. Поэтому вам все равно нужно использовать что-то вроде MappedByteBuffer в Java