2011-11-21 34 views
2

如何從打開的RandomAccessFile實例獲取文件名?Java:從打開的RandomAccessFile實例獲取文件名

我只能找到相關文件本身下列方法:

  • getFD():它返回一個FileDescriptor對象
  • getChannel():它返回一個FileChannel對象

我想獲得一個File類實例或直接傳遞給RandomAccessFile構造函數的文件名字符串:

RandomAccessFile(File file, String mode) 

謝謝!

+3

保留您用於打開RAF的文件。無論如何,我永遠不會依賴RAF或將它傳遞給任何接口 - 它是一個實現細節。如果你有Foo接口,那麼你應該有一個FileBasedFoo實現。將文件保留爲成員變量以供日後參考。 –

+0

您唯一的選擇可能是編寫一些非常醜陋和詭異的代碼,將文件描述符傳遞給JNI,並使用C代碼來查找與文件描述符關聯的文件。 – Tudor

回答

1

我加入我的評論(以上)供大家參考答案/投票(我想的聲譽!)

RandomAccessFile的的使用應被視爲一個實現細節。不要將它傳遞給你的代碼。您可能很快就會發現您希望以前依賴英國皇家空軍與其他方面合作的東西 - 也許是一個遠程系統。將業務邏輯/行爲從您正在做的事情中拿出來放入界面中。在將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 
} 

,任何地點,現在可以透明地切換到..

class RpcFoo implements Foo { 
    // ... some SOAPy implementation here 
} 

class RestFoo implements Foo { 
    // ... you get the idea 
}