我使用的是专有的Java API(源代码未公开),它在其中一个接口中定义了一个方法:
Foo.bar(String fileName, String formatName);
这个方法的问题是它需要一个String fileName
。我希望有一种方法可以采用File file
或某种流代替,但这样的方法不存在。反编译。class文件显示API在内部做了一个new File(fileName)
,但是模仿它的整个行为太令人生畏和冒险了。
在我的代码中,我创建了一个流,我希望能够调用bar()
,而不需要首先向磁盘写入任何内容(至少不是物理上的)。
有什么办法可以欺骗Foo.bar()
接受我的流吗?也许通过在Java中使用一些虚拟文件系统?
满足您的需求了吗?
https://docs.oracle.com/javase/8/docs/technotes/guides/io/fsp/filesystemprovider.htmljava.nio.file.spi.FileSystemProvider类允许您开发一个自定义文件系统提供程序。自定义文件系统提供程序很有用在以下情况下:
开发基于内存或zip-file的文件系统
通过扩展类java.nio.file.spi.FileSystemProvider并覆盖它的方法newInputStream
或newOutputStream
,你应该能够提供你的流作为一个文件。