如何从 Java 中的 InputStream 获取文件路径/名称?
问问题
29355 次
3 回答
12
这是不可能的。(不是来自 Java API 中的 FileInputStream)。构造FileInputStream
函数不会将此信息存储在任何字段中:
public FileInputStream(File file) throws FileNotFoundException {
String name = (file != null ? file.getPath() : null);
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkRead(name);
}
if (name == null) {
throw new NullPointerException();
}
fd = new FileDescriptor();
open(name);
}
于 2010-03-23T17:06:41.433 回答
10
你不能因为InputStream
可能不是文件或路径。您可以实现自己的InputStream
动态生成数据
于 2010-03-23T17:04:10.540 回答
4
两个重要的面向对象设计原则阻止你做你所要求的:抽象和封装。
- 抽象是定义一个一般概念的过程,该概念只有在特定上下文中使用所需的细节(更多细节在这里)。在这种情况下,抽象是
InputStream
,它是一个可以提供字节的通用接口,无论这些字节的来源如何。an 的抽象InputStream
没有文件路径的概念;这仅与InputStream
. - 封装是向该类的消费者/用户隐藏类的实现细节的过程。在这种特殊情况下,
FileInputStream
封装它正在读取的文件的详细信息,因为InputStream
该信息与使用无关。path
实例字段被封装,因此对类的用户不可用。
话虽如此,如果您愿意接受一些重要的限制,则可以访问该变量。path
基本上,要点是您可以检查它是否InputStream
实际上是一个实例FileInputStream
,如果是,则使用反射来读取path
实例字段。我将省略进行该访问的细节,因为它很容易在java.lang.Class
Java 文档和在线中找到,而且在大多数情况下通常不是一件好事。由于该问题没有提供有关原因的上下文,因此很难提供任何更合理的方法。
于 2016-04-22T20:08:10.250 回答