2011-11-21 4 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の使用は、実装の詳細として認識されなければなりません。あなたのコードの周りを渡さないでください。あなたは、以前はRAFに依存していたことが、何か他のものと仕事をしたいと思っているかもしれません。あなたがやっていることからビジネスロジック/行動を取り出し、それをインターフェースに入れます。 FileとRandomAcecssFileをメンバー変数として格納するクラスにそのインターフェイスを実装します。これにより、常に両方にアクセスできるようになります。あなたは、Fileがコンストラクタパラメータとして取るURIを使用することさえできます。 、あなたはFooのを使用しましたあなたのコード内の

class FileBasedFoo implements Foo { 
    private File file; 
    private RandomAccessFile raf; 

    // ... your impl here 
} 

どこでも:

interface Foo { 
    public URI getUri(); 

    public void doSomething(); 

    public Bar doSomethingElse(); 
} 

あなたは持つことができますので、あなたは、インタフェースFooのを持っている場合 - これはかなりオープンかつ合理的なものです

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

class RestFoo implements Foo { 
    // ... you get the idea 
} 
関連する問題