从FileOutputStream获取文件名

Ebb*_*ham 42 java io fileoutputstream

有没有办法从一个FileOutputStream或从中获取文件名FileInputStream

Tom*_*m G 32

看起来答案是否定的:
http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileOutputStream.html
http://docs.oracle.com/javase/7/docs/api/index.html?java/io/FileOutputStream.html

没有返回FileString用于构造流的公共方法.

编辑:同样适用FileInputStream.

  • @ Stephen-我阅读了文档,但只想确认我没有错过任何内容. (3认同)

Cos*_*atu 15

开箱即用的文件输入/输出流不提供此功能,但没有什么能阻止您编写存储File(或fileName)的子类并为其提供getter.

我建议FileNameAware为此实现一些接口),因为I/O Streams通常用InputStream/ OutputStreamabstract类引用,以避免将应用程序与特定实现耦合.


Han*_*gon 12

可能,反思:Tom G的回答是正确的,即没有API来获取路径.但是,如果你像我一样陷入框架,你无法改变,也无法通过任何其他方式获取文件名,你可以使用反射来获取路径(在我的情况下,我需要它用于调试目的).

Field pathField = FileOutputStream.class.getDeclaredField("path");
pathField.setAccessible(true);
String path = (String) pathField.get(outputStream);
Run Code Online (Sandbox Code Playgroud)

显然,FileOutpuStream的实现可能会随着时间而改变,这段代码可能会破坏.另外,为了清楚起见,我在上面的代码段中省略了异常处理.

不适用于1.6和1.7 确认1.8.

  • 除此之外,这不是重点.你的投票完全不合适.如果"路径"不在那里,那么将会有另一个具有不同名称的字段也可以执行相同操作.我的观点是,可以使用反射来获取信息,但不建议这样做. (3认同)