如何获取inputStream使用的文件名?

时间:2014-01-28 10:17:52

标签: java

我有一个方法接受一个I​​nputStream作为参数。如何找到传递的处理程序正在处理的文件?

例如:

public performSomething(InputStream inputStream) {
    System.out.println(FILENAME);
}

应该替换FILENAME,以便显示处理程序打开的文件名。

3 个答案:

答案 0 :(得分:6)

我猜你不能,因为输入流可能不属于文件。例如,它可以是SocketInputStreamByteArrayInputStream。输入流只是一个抽象

答案 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没有官方方式。