【问题标题】:Is there a way to get a file from InputStream有没有办法从 InputStream 获取文件
【发布时间】:2020-09-29 11:42:36
【问题描述】:

我目前正在读取一个文件:

InputStream inputStream = MyClass.class.getClassLoader().getResourceAsStream(FILE);

有什么方法可以从这个InputStream 获取文件,以便我以后可以写入它。 或者是否可以将InputStream 转换为指向完全相同文件的OutputStream? 我发现getResourceAsStream() 不存在OutputStream

【问题讨论】:

  • No 不需要创建新文件然后复制内容。我想获得与输入流引用的完全相同的文件。
  • InputStream 没有此信息。不仅如此,应用程序中的资源甚至不总是可以表示为 File

标签: java file io inputstream outputstream


【解决方案1】:

你可以这样做

File file = new File(MyClass.class.getResource(FILE).toURI());
FileOutputStream stream = new FileOutputStream(file);

它可以在 IDE 中运行,或者如果您的应用是 Web 应用(战争)。 但是如果你是写一个jar应用,在构建的时候是不行的,因为文件会在jar包里,你不能这样写。在这种情况下,您应该将 FILE 存储在外部(而不是资源中)。

【讨论】:

  • 如果此资源在 JAR 文件中,则此方法不起作用,这是通常的情况
  • 没有办法在运行时改变资源。要编辑 jar 存档中的文件,您需要将其解压缩,重写文件并将其打包回来。即使您进行了这些奇怪的操作,您也无法使用更改后的文件,因为 JVM 会加载旧的 jar。
  • 我知道,这就是为什么我评论说您的答案在大多数情况下都行不通。
  • 我回答的重点是“您应该将文件存储在外部(而不是在资源中)”。如果有人错过了,我很抱歉
猜你喜欢
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多