我有一个方法接受一个InputStream作为参数。如何找到传递的处理程序正在处理的文件?
例如:
public performSomething(InputStream inputStream) {
System.out.println(FILENAME);
}
应该替换FILENAME,以便显示处理程序打开的文件名。
答案 0 :(得分:6)
我猜你不能,因为输入流可能不属于文件。例如,它可以是SocketInputStream
或ByteArrayInputStream
。输入流只是一个抽象
答案 1 :(得分:1)
可以创建输入流以从文件或任何其他数据源读取。因此,将文件名附加到输入流是没有意义的。
简单示例:
InputStream input= assetInfo.openStream();
File t = new File("");
OutputStream out = new FileOutputStream(t);
int read=0;
byte[] bytes = new byte[1024];
while((read = input.read(bytes))!= -1){
out.write(bytes, 0, read);
}
查看assetInfo以查看该类是否公开该数据(您甚至可以使用反射查看该类)。请注意,创建者或assetInfo在设计错误时没有公开此信息,或者您正在尝试制作一个。
答案 2 :(得分:0)
即使您确定自己拥有FileInputStream
,您仍然无法获取基础文件。 FileInputStream
不保留其File
参数,但会立即打开文件并仅保留FileDescriptor
,这是OS资源的本地int
句柄的包装。
从OpenJDK版本7,Update 40开始,引入了String path
变量,所以运气好的话,你可能会尝试反射获取它。
当然,这只不过是heurstics。公共API没有官方方式。