Java: получить имя файла из открытого экземпляра RandomAccessFile - PullRequest
2 голосов
/ 21 ноября 2011

Как я могу получить имя файла из открытого экземпляра RandomAccessFile?

Я могу найти только следующие методы, связанные с самим файлом:

  • getFD(): который возвращаетFileDescriptor объект
  • getChannel(): который возвращает объект FileChannel

Я хотел бы получить экземпляр класса File или также непосредственно строку имени файла, которую я передаю в конструктор RandomAccessFile:

RandomAccessFile(File file, String mode) 

Спасибо!

1 Ответ

2 голосов
/ 22 ноября 2011

Я добавляю свой комментарий (выше) в качестве ответа на ваше рассмотрение / голосование (мне нужна репутация!)

Использование 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
}
...