当前位置: 首页 > 知识库问答 >
问题:

如何获取inputStream使用的文件名?[副本]

鲁龙野
2023-03-14

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

例如:

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

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

共有3个答案

翟淮晨
2023-03-14

即使您确定您有一个文件输入流,您仍然无法获取底层文件FileInputStream不保留其参数,但立即打开文件并只保留文件描述符,它是操作系统资源的本机int句柄的包装。

在OpenJDK版本7的更新40中,引入了一个字符串路径变量,因此如果运气好的话,您可以尝试反射地获得它。

当然,这只能是启发式。没有通过公共API的官方方式。

呼延靖
2023-03-14

可以创建输入流以从文件或任何其他数据源读取。因此,将文件名附加到输入流是没有意义的。

简单示例:

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在没有公开此信息的情况下犯了一个设计错误,或者您现在正试图这样做。

詹甫
2023-03-14

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

 类似资料:
  • 上面是我的根、目录和路径的结构。我想得到三样东西<代码>汽车,和。 是目录的名称 这是我的代码: 如您所见,我设法获得了和。现在我想得到每个文件的车名(directroy的名字)。。。最简单的方法是什么?

  • 问题内容: 我必须使用SFTP从ZIP存档(只有一个文件,我知道它的名称)中获取文件内容。我唯一拥有的是ZIP的。大多数示例说明如何使用以下语句获取内容: 但是正如我所说,我的本地计算机上没有ZIP文件,也不想下载它。是够看了? UPD: 这是我的方法: 问题答案: 好吧,我已经做到了: 它可以帮助我阅读ZIP的内容而无需写入另一个文件。

  • 我必须使用SFTP从ZIP存档(只有一个文件,我知道它的名称)获取文件内容。我唯一拥有的是ZIP的InputStream。大多数示例显示了如何使用此语句获取内容: 但正如我所说,我的本地机器上没有ZIP文件,我不想下载它。输入流是否足以读取? UPD:我就是这样做的:

  • 我的Android应用程序中有以下字符串:

  • 问题内容: 我如何阅读像android app中的文本文件: 所以我可以返回一个字符串,如: 我想到的是(伪代码): 问题答案: 试试这个

  • 问题内容: 我正在使用URL类从中读取InputStream。有什么我可以使用RestTemplate的方法吗? 我怎样才能 用,而不是使用? 问题答案: 您不应该直接获得。旨在封装处理响应(和请求)内容。它的优势在于处理所有IO,并为您提供现成的Java对象。 的一位原始作者Brian Clozel 表示: 并不意味着流响应主体;它的合同不允许这样做,而且已经存在了很长时间,以至于在不中断许多应