Что значит открыть RandomAccessFile в Java?

RandomAccessFile имеет метод close() со следующим описанием:

Закрывает этот поток файлов с произвольным доступом и освобождает все системные ресурсы, связанные с потоком.

Что значит открыть RandomAccessFile? Я спрашиваю, потому что нет метода open(). Является ли открытие RandomAccessFile неявным, когда мы выполняем такие задачи, как чтение и запись? Почему нет метода open()? Имеет ли смысл открывать только RandomAccessFile без одновременного выполнения каких-либо других задач?


person Cow Pow Pow    schedule 20.03.2017    source источник
comment
Почему на File тоже нет open? Базовый io API работает с потоками, просто прочитайте соответствующее руководство по оракулу.   -  person pvg    schedule 21.03.2017
comment
Я никогда не думал читать документацию оракула. Спасибо за ваше понимание.   -  person Cow Pow Pow    schedule 21.03.2017


Ответы (2)


как указано в документе Java, файл создается с использованием конструктора https://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html

RandomAccessFile(файловый файл, строковый режим) Создает файловый поток с произвольным доступом для чтения и, при необходимости, для записи в файл, указанный аргументом File.

RandomAccessFile(строковое имя, строковый режим) Создает файловый поток с произвольным доступом для чтения и, при необходимости, для записи в файл с указанным именем.

Точнее :

Создает файловый поток с произвольным доступом для чтения и, при необходимости, для записи в файл с указанным именем. Новый объект FileDescriptor создается для представления подключения к файлу. Аргумент режима указывает режим доступа, в котором файл должен быть открыт. Допустимые значения и их значения указаны для конструктора RandomAccessFile(File,String).

При наличии диспетчера безопасности его метод checkRead вызывается с аргументом имени в качестве аргумента, чтобы проверить, разрешен ли доступ для чтения к файлу. Если режим разрешает запись, метод менеджера безопасности checkWrite также вызывается с аргументом имени в качестве аргумента, чтобы проверить, разрешен ли доступ для записи к файлу.

Поскольку в Java нет явного деструктора (насколько мне известно), вам необходимо явно закрыть файл после создания RandomAccessFile.

person LoneWanderer    schedule 20.03.2017
comment
Итак, как только мы закроем RandomAccessFile, поток будет закрыт, и нам придется создать новый экземпляр, чтобы снова выполнить rw в файле? - person Cow Pow Pow; 21.03.2017
comment
Я не проверял это сам, но так я получаю его из документа Java. Сделайте мини-проект из 2 строк, чтобы убедить себя :) - person LoneWanderer; 21.03.2017

Когда вы создаете новый экземпляр объекта RandomAccessFile, это похоже на неявный вызов метода open.
Во время создания объекта также создается новый объект FileDescriptor для представления подключения к файлу.

Я предлагаю создать этот объект с помощью инструкции try-with-resources, потому что RandomAccessFile реализует интерфейс java.lang.AutoCloseable.

try (RandomAccessFile stmt = new RandomAccessFile("file.txt", "rw")) {
  // your code
} catch (IOException e) {
  // Exception handling
}
person freedev    schedule 20.03.2017