【问题标题】:How do I get an FileInputStream from FileItem in java?如何从 java 中的 FileItem 获取 FileInputStream?
【发布时间】:2014-09-13 14:49:54
【问题描述】:

我试图避免使用 FileItem getInputStream(),因为它会得到错误的编码,因此我需要 FileInputStream。有没有办法在不使用这种方法的情况下获得 FileInputStream?或者我可以将我的文件项转换为文件吗?

if (this.strEncoding != null && !this.strEncoding.isEmpty()) {
    br = new BufferedReader(new InputStreamReader(clsFile.getInputStream(), this.strEncoding));
} 
else {
    // br = ?????
}

【问题讨论】:

  • 如果能分享示例代码就好了。
  • 你说的是来自 Apache commons 的 FileItem 吗?
  • InputStream 在 Java 中没有编码;它处理bytes。从InputStreamReader 通常涉及定义编码,但这不是流问题。如果您获得InputStream 的方式与您获得的编码有关,那么我怀疑某些未定义/奇怪/默认/平台特定的东西正在起作用,这可能会在以后变成一个错误。
  • 文件类型是什么?是纯文本文件还是二进制文件?
  • 正如@GPI 所说,您有一个误解,因为InputStream 没有编码。向我们展示您正在使用的从FileItem.getInputStream() 读取的代码,我们可以告诉您您做错了什么。

标签: java inputstream java-io fileitem


【解决方案1】:

您可以在此处使用write 方法。

File file = new File("/path/to/file");
fileItem.write(file);

【讨论】:

  • 我做了,只是举一个简单的例子。我自己可以很容易地输入它并且仍然设法写同样的东西:)
  • 没问题,我现在就删除我的评论
【解决方案2】:

你可以试试

FileItem#getString(encoding)

使用指定的编码将文件项的内容作为字符串返回。

【讨论】:

  • 我没有编码。可以是任何东西
【解决方案3】:

InputStream 是二进制数据,字节。必须通过给出这些字节的编码将其转换为文本。

Java 在内部使用 Unicode 来表示所有文本脚本。对于文本,它使用 String/char/Reader/Writer。

对于二进制数据,byte[]、InputStream、OutputStream。

所以你可以使用一个桥接类,比如InputStreamReader

String encoding = "UTF-8"; // Or "Windows-1252" ...
BufferedReader in = new BufferedStream(
    new InputStreamReader(fileItem.getInputStream(),
                          encoding));

或者如果你读取字节:

String s = new String(bytes, encoding);

编码通常是一个选项参数(然后存在一个没有编码的重载方法)。

【讨论】:

  • 如果你在谈论文本文件,有一个简单的方法FileItem#getString()。二进制文件呢。我可以将它用于图像吗?
  • 你在 getString (+1) 上是对的,虽然我觉得被召唤来祈祷 Binary 和 Text 之间的分裂;因为那 似乎不清楚,并且可能被错误地使用。二进制文件永远不应该存储在字符串中。
  • 据我所知Reader 仅适用于文本流。
  • @Braj 是的,您只能使用 ~Reader 来阅读文本,这似乎是问题所在:导致文本编码错误。所以二进制文件的转换没有指定编码。
  • 我没有编码。可以是任何东西
猜你喜欢
  • 2018-04-13
  • 2020-12-10
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
  • 2011-11-16
  • 2020-04-30
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多