我正在使用专有的 Java API(未公开源代码),该 API 在其接口(interface)之一中定义了一种方法:
Foo.bar(String fileName, String formatName);
此方法的问题在于它需要一个String fileName
。我希望有一种方法可以使用 File file
或某种stream 来代替,但这样的方法不存在。反编译 .class 文件显示 API 在内部执行了一个 new File(fileName)
,但模仿其整个行为过于令人畏惧和危险。
在我的代码中,我创建了一个流,并且我希望能够调用 bar()
而无需先向磁盘写入任何内容(至少不是物理写入)。
有什么方法可以欺骗 Foo.bar()
接受我的流吗?也许通过利用 Java 中的一些虚拟文件系统?
我们在此使用 Java 1.7。
最佳答案
这能满足您的需求吗?
https://docs.oracle.com/javase/8/docs/technotes/guides/io/fsp/filesystemprovider.html
The java.nio.file.spi.FileSystemProvider class allows you to develop a custom file system provider. A custom file system provider is useful in the following situations:
Developing a memory-based or zip-file-based file system
通过扩展类 java.nio.file.spi.FileSystemProvider
并重写其方法 newInputStream
或 newOutputStream
您应该能够将流作为文件提供。
关于java - 将流转换为路径/文件名而不写入物理磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31782957/