如何确定FileInputStream指向与FileOutputStream相同的文件?

4

我能否从FileInputStream或FileOutputStream中获取关联的文件?我想知道它们是否指向同一个文件。但基本上,我想看看是否可以获取与FileInputStream或FileOutputStream相关的文件的引用。是否有类可以使用?或者我可以从FileInputStream或FileOutputStream中获取它?


3
答案似乎是否定的。请参见此处链接:https://dev59.com/zG445IYBdhLWcg3wTIjm - Trevor Freeman
哦,好的。看起来我需要编写自己的FileInputStream或FileOutputStream类,并在其中引用文件?我想我可以做到。谢谢! - JoshJ
1个回答

4
这是我做的事情:
public class FileAwareFileInputStream extends FileInputStream {
    private File file;

    public FileAwareFileInputStream(File file) throws FileNotFoundException {
        super(file);
        this.file = file;
    }

    public File getFile() {
        return this.file;
    }
}

同样地,对于FileOutputStream也是如此。

我同意,这是个不错的解决方法。然而...我认为FileInputStream很可能不是一个设计用于继承的类。在跨包边界扩展这样的类可能会使您的应用程序变得脆弱,因为您可能会依赖于FileInputStream的实现细节。我建议您使用FileAware作为包装类,而不是扩展FileInputStream,并将FileInputStream作为包装器的成员字段。您需要进行方法转发。通过这种方式,您更倾向于组合而非继承(Joshua Bloch,《Java Essentials》第2版)。 - scottb
嗨,我想这样做,但是有些方法使用它并且需要它是InputStream类型,所以我不能将其用作包装器。虽然我同意组合更好,但是这个类仅在内部和非常小的区域中使用,并且对代码库中的任何其他人都不可见,因此我认为脆弱性可能会受到限制。 - JoshJ

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