Spec-Zone .ru
спецификации, руководства, описания, API
След: Существенные Классы
Урок: Основной ввод-вывод
Раздел: Файловый ввод-вывод (Обладающий NIO.2)
Файлы Произвольного доступа
Домашняя страница > Существенные Классы > Основной ввод-вывод

Файлы Произвольного доступа

Разрешение на файлы произвольного доступа непоследовательный, или случайный, доступ к содержанию файла. Чтобы получить доступ к файлу в произвольном порядке, Вы открываете файл, ищете определенное расположение, и читаете из или пишете в тот файл.

Эта функциональность возможна с SeekableByteChannel интерфейс. SeekableByteChannel интерфейс расширяет ввод-вывод канала с помощью понятия текущей позиции. Методы позволяют Вам установить или запросить позицию, и можно тогда считать данные из, или записать данные в, то расположение. API состоит из некоторых, удобных, методы:

Чтение и Запись Файлов С вводом-выводом Канала показывают что Path.newByteChannel методы возвращают экземпляр a SeekableByteChannel. На файловой системе значения по умолчанию можно использовать тот канал как есть, или можно бросить это к a FileChannel предоставление Вас получает доступ к большему количеству расширенных функций, таких как отображение области файла непосредственно в память для более быстрого доступа, блокировка области файла, или чтения и записи байтов от абсолютного расположения, не влияя на текущую позицию канала.

Следующий фрагмент кода открывает файл и для чтения и для записи при использовании одного из newByteChannel методы. SeekableByteChannel это возвращается, бросается к a FileChannel. Затем, 12 байтов читаются с начала файла, и строки, "Я был здесь!" пишется в том расположении. Текущая позиция в файле перемещается до конца, и 12 байтов с начала добавляются. Наконец, строка, "Я был здесь!" добавляется, и канал на файле закрывается.

String s = "I was here!\n";
byte data[] = s.getBytes();
ByteBuffer out = ByteBuffer.wrap(data);

ByteBuffer copy = ByteBuffer.allocate(12);

try (FileChannel fc = (FileChannel.open(file, READ, WRITE))) {
    // Read the first 12
    // bytes of the file.
    int nread;
    do {
        nread = fc.read(copy);
    } while (nread != -1 && copy.hasRemaining());

    // Write "I was here!" at the beginning of the file.
    fc.position(0);
    while (out.hasRemaining())
        fc.write(out);
    out.rewind();

    // Move to the end of the file.  Copy the first 12 bytes to
    // the end of the file.  Then write "I was here!" again.
    long length = fc.size();
    fc.position(length-1);
    copy.flip();
    while (copy.hasRemaining())
        fc.write(copy);
    while (out.hasRemaining())
        fc.write(out);
} catch (IOException x) {
    System.out.println("I/O Exception: " + x);
}

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Чтение, Запись, и Создание Файлов
Следующая страница: Создание и Чтение Каталогов