首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileItem inputStream to FileInputStream

FileItem inputStream to FileInputStream
EN

Stack Overflow用户
提问于 2017-02-03 12:18:26
回答 3查看 2K关注 0票数 2

我有一个网页的上传功能,让你上传一个excel文件,点击上传一个Ajax调用被触发。从这里我得到FileItem输入流,并使用fileItem.getInputStream()方法,我有另一个类,它有一个方法,需要将文件传递给它,它有一个FileInputStream参数。因此,我的问题是如何将输入流转换为FileInputStream

一个详细的解决方案将不胜感激,因为我是一个初级开发人员,所以我仍然在学习。

非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-03 12:34:10

来自JavaDoc

FileInputStream从文件系统中的文件中获取输入字节。

我建议两种解决办法:

  1. 正确的方法是更改API,并将InputStream作为参数。我看不出为什么在API中有FileInputStream
  2. 如果您不拥有API,并且无法更改它,恐怕您需要将InputStream保存到临时文件,然后创建给出该文件的路径的FileInputStream (这是一个次优的解决方案,因为您首先将文件写入磁盘-冒着空间风险--然后读取它,流API是为动态读写数据而设计的)
票数 1
EN

Stack Overflow用户

发布于 2017-02-03 12:37:16

如果您使用的是org.apache.commons.fileupload.FileItem接口,那么您的类可能是DefaultFileItem,它是DiskFileItem的一个子类。所以您可以将FileItem转换为DiskFileItem。然后,如果您查看DiskFileItem源代码,您会发现getInputStream()实际上正在返回一个FileInputStream或ByteArrayInputStream,如果您从DiskFileItem获得一个FileInputStream,您可以直接将它传递给您的另一个类。但是,如果得到一个ByteArrayInputStream,则必须将内容写入自己的临时文件,然后在这个临时文件上打开另一个FileInputStream。还有另一个方法DiskFileItem.getStoreLocation(),它似乎返回用于上传的服务器端文件,但是如果文件缓存在内存中,它可能返回null。

总之:您不能确定会有一个服务器端文件,因为上传可能被缓存在内存中。因此,如果您在其他地方需要一个FileInputStream,您必须自己创建一个临时文件。有一个关于如何在两个流这里之间进行管道的示例。

票数 0
EN

Stack Overflow用户

发布于 2022-07-31 17:02:51

//将文件路径/名称直接传递给FileInputStream

代码语言:javascript
复制
FileInputStream input1 = new FileInputStream("input.txt");

//Save文件路径已由用户传入到字符串变量中。

代码语言:javascript
复制
String fileName = args[0];

//传递路径到文件对象

代码语言:javascript
复制
File inputFile = new File(fileName);

//将文件对象传递给FileOutputStream

代码语言:javascript
复制
FileOutputStream output = new FileOutputStream(inputFile);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42024155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档