2011-11-21 33 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 
}