Я добавляю свой комментарий (выше) в качестве ответа на ваше рассмотрение / голосование (мне нужна репутация!)
Использование RandomAccessFile должно восприниматься как деталь реализации. Не передавайте это вокруг вашего кода. Вскоре вы можете обнаружить, что хотите, чтобы вещи, которые ранее зависели от RAF, работали с чем-то другим - возможно, с удаленной системой. Возьмите бизнес-логику / поведение из того, что вы делаете, и поместите это в интерфейс. Реализуйте этот интерфейс в классе, который хранит File и RandomAcecssFile как переменные-члены. Это гарантирует, что у вас всегда есть доступ к обоим. Вы можете даже использовать URI - который File принимает в качестве параметра конструктора. Это довольно открытая и разумная вещь - так что если у вас есть интерфейс Foo:
interface Foo {
public URI getUri();
public void doSomething();
public Bar doSomethingElse();
}
Вы можете иметь:
class FileBasedFoo implements Foo {
private File file;
private RandomAccessFile raf;
// ... your impl here
}
и в любом месте вашего кода, где вы использовали Foo, теперь можно прозрачно переключиться на ..
class RpcFoo implements Foo {
// ... some SOAPy implementation here
}
class RestFoo implements Foo {
// ... you get the idea
}