Java:从已打开的RandomAccessFile实例中获取文件名

3

如何从已打开的RandomAccessFile实例中获取文件名?

我只能找到以下与文件本身相关的方法:

  • getFD() :返回一个FileDescriptor对象
  • getChannel() :返回一个FileChannel对象

我想要获取一个File类实例,或者直接获取我传递给RandomAccessFile构造函数的文件名字符串:

RandomAccessFile(File file, String mode) 

谢谢!


3
保留用于打开 RAF 文件的文件。我永远不会依赖 RAF 或在任何界面中传递它 - 这是实现细节。如果你有一个执行某些操作的接口 Foo,你应该有一个基于文件的 Foo 实现。将文件作为成员变量保留以供以后参考。 - Doug Moscrop
你唯一的选择可能是编写一些非常丑陋和牵强附会的代码,将文件描述符传递给JNI,并使用C代码查找与文件描述符相关联的文件。 - Tudor
1个回答

2

我将我的评论(上面)作为答案供您考虑/投票(我想要声望!)

应该将RandomAccessFile的使用视为实现细节。不要在代码中传递它。您可能很快发现,您希望以前依赖于RAF的事物能够与其他东西一起工作 - 也许是远程系统。将业务逻辑/行为从您正在进行的操作中取出,并将其放入接口中。在存储文件和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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接