【问题标题】:How do I determine that a FileInputStream points to the same file as a FileOutputStream? [duplicate]如何确定 FileInputStream 指向与 FileOutputStream 相同的文件? [复制]
【发布时间】:2013-07-31 16:24:07
【问题描述】:

我可以从 FileInputStream 或 FileOutputStream 中获取相关文件吗?我想知道他们是否指向同一个文件。但基本上我想看看我是否可以获得对属于 FileInputStream 或 FileOutputStream 的文件的引用。我可以使用这样的课程吗?或者我可以从 FileInputStream 或 FileOutputStream 中取出它吗?

【问题讨论】:

  • 答案似乎是否定的。见这里:stackoverflow.com/questions/4930111/…
  • 哦,好的。所以看起来我必须编写自己的 FileInputStream 或 FileOutputStream 类,其中包含对 File 的引用?我想我能做到。谢谢!

标签: java


【解决方案1】:

这就是我所做的:

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 的实现细节。我建议您不要扩展 FileInputStream,而是使用 FileAware 作为包装器类,并使 FileInputStream 成为包装器的成员字段。您需要进行方法转发。通过这种方式,您更喜欢组合而不是继承(Joshua Bloch,Java Essentials,第 2 版)。
  • 嗨,我想这样做,但是有些方法使用它并且他们需要它是 InputStream 类型,所以我不能将它用作包装器。我确实同意构图更好。此外,此类在内部使用并且在非常小的区域内使用,代码库中的其他任何人都看不到,所以我认为脆弱性可能会受到限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多