如何从 HSSFWorkbook 对象获取输入流

2024-03-18

我希望我的 Web 应用程序用户将一些数据下载为 Excel 文件。

我有下一个函数在响应对象中发送输入流。

public static void sendFile(InputStream is, HttpServletResponse response) throws IOException {
        BufferedInputStream in = null;
        try {
            int count;
            byte[] buffer = new byte[BUFFER_SIZE];
            in = new BufferedInputStream(is);
            ServletOutputStream out = response.getOutputStream();
            while(-1 != (count = in.read(buffer)))
                out.write(buffer, 0, count);
            out.flush();            
        }   catch (IOException ioe) { 
            System.err.println("IOException in Download::sendFile"); 
            ioe.printStackTrace();
        } finally {
            if (in != null) {
                try { in.close(); 
                } catch (IOException ioe) { ioe.printStackTrace(); }
            }   
        }
    }

我想将 HSSFWorkbook 对象转换为输入流并将其传递给前面的方法。

public InputStream generateApplicationsExcel() {
    HSSFWorkbook wb = new HSSFWorkbook();
    // Populate the excel object
    return null; // TODO. return the wb as InputStream 
}

http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFWorkbook.html http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFWorkbook.html


您的问题的问题在于您正在混合 OutputStreams 和 InputStreams。输入流是您读取的内容,输出流是您写入的内容。

这就是我将 POI 对象写入输出流的方式。

// this part is important to let the browser know what you're sending
response.setContentType("application/vnd.ms-excel");
// the next two lines make the report a downloadable file;
// leave this out if you want IE to show the file in the browser window
String fileName = "Blah_Report.xls";
response.setHeader("Content-Disposition", "attachment; filename=" + fileName); 

// get the workbook from wherever
HSSFWorkbook wb = getWorkbook();
OutputStream out = response.getOutputStream();
try {
   wb.write(out);
}       
catch (IOException ioe) { 
  // if this happens there is probably no way to report the error to the user
  if (!response.isCommited()) {
    response.setContentType("text/html");
    // show response text now
  }
}

如果您想重复使用现有代码,则必须将 POI 数据存储在某处,然后将其转换为输入流。通过将其写入 ByteArrayOutputStream,然后使用 ByteArrayInputStream 读取这些字节,可以轻松完成此操作,但我不推荐这样做。您现有的方法作为通用 Pipe 实现会更有用,您可以在其中将数据从 InputStream 传输到 OutputStream,但编写 POI 对象时不需要它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 HSSFWorkbook 对象获取输入流 的相关文章

  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐

  • .NET 泛型术语 - 开放/封闭、未绑定/构造

    NET 泛型术语有点含糊 更糟糕的是 它似乎在不同的来源中被模糊且不同地使用 基本上不清楚的是这 4 个术语之间的关系 与 类型 相关 open closed unbound 建 我明白那个List
  • 每个面有 K 个顶点的 3D 点的三角测量

    我正在使用 Three js 我有一个收藏3D点 x y z 和面的集合 一张脸是由K points 它可以是凸的 也可以是凹的 我在 Three js 文档中找不到任何可以帮助我的内容 一种解决方案可能是对这些形状进行三角测量 但到目前为
  • 如何在 swift 中检查两个实例是否具有相同的类/类型

    我知道我可以检查 Swift 中 var 的类型is if item is Movie movieCount 1 else if item is Song songCount 1 但我如何检查两个实例是否具有相同的类 以下不起作用 if i
  • Atlas 上的 Mongoose 与 ReplicaSet

    我在 MongoDB Atlas 上有一个副本集 这是我的 mongo shell 连接字符串 可以完美连接 mongo mongodb MY SERVER shard 00 00 clv3h mongodb net 27017 MY SE
  • 如何利用 .woff 字体的浏览器缓存?

    在 PageSpeed Insights 中 我不断看到利用浏览器缓存我正在使用的特定图标集 字体的消息 iconFont woff 2 天 我已将 htaccess 设置为 EXPIRES CACHING
  • 当我必须使用 Intents 时,createChooser 是什么?我可以用这个方法做什么?

    我一直在查看 stackoverflow 但我没有找到关于什么是 createChooser 的定义以及为什么我可以使用它以及在哪种情况下最好使用它 提前致谢 例如 您的应用程序中有一个共享图片选项 您定义这样的意图 Intent picM
  • 在 docker 微服务设置中运行 django rq 的正确方法

    我猜我的 docker 容器设置有问题 因为每次我从 django 运行任务时 我都会在 docker 容器输出中看到ps aux创建了新进程python mange py rqworker mail而不是使用现有的 请参阅截屏视频 htt
  • 如何根据php中的创建日期从目录中删除文件?

    我有一个存储 html 文件的缓存文件夹 它们会在需要时被覆盖 但很多时候 很少使用的页面也会缓存在其中 最终会占用空间 5 周后 驱动器已满 有超过 270 万个缓存文件 循环遍历包含数十万个文件的目录并删除超过 1 天的文件的最佳方法是
  • Android:处理下载数据时意外的互联网断开连接

    我这里有一个将数据从远程服务器下载到文件的功能 我对我的代码仍然没有信心 我的问题是 如果在读取流并将数据保存到文件时突然与互联网断开连接 下面的这些捕获异常是否真的可以捕获此类事件 如果没有 您能建议如何处理此类事件吗 注意 我在一个线程
  • XML 模式到 C++ 类 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我必须编写一个 C 应用程序 使用 GUI 的 Qt 框架 它可以编辑存储在 xsd 架构文件描述的
  • C++11:按值调用、移动语义和继承

    假设我有一个类 我计划直接将其公开为可实例化类 给程序员 class Base public Base std string text m text std move text private std string m text 到目前为止
  • 二维码数据格式的规范是什么?我在任何地方都找不到它

    我特别想问的是 规格是否以及是什么 设置 QR 码内文本的格式 不是如何生成代码 我可以做到 我需要将 hCard 数据放入 QR 码中 但是我不知道如何将 QR 码标记为 VCF 数据 相对于 URL 文本等 以便解码器知道该怎么做 我在
  • 在 iOS 10 中添加本地通知 - Swift 3

    所以我一直在尝试向新的 UNUserNotificationCenter 添加通知 但我似乎没有得到它 我的视图控制器有一个操作 IBAction func sendPressed sender AnyObject let content
  • 如何获取设备令牌

    安装完成后 我需要获取 deviceToken 以用于其他目的 这是我到目前为止所开发的 Parse initialize this qqd423WEfwWEF32FewferT434fs323rfRT g7Rre4g7gsGRwgGw45
  • 忽略特定列表排序器的排序

    我可以忽略 jquery 表排序插件中特定列的排序吗 因此 基本上 当页面加载时 我不希望在 搜索 列上进行任何排序 因为它包含图像并自行进行一些 JavaScript 处理 这会大大减慢我的排序速度 这是我的代码
  • window.parent.location.href 或 window.top.location 哪一种更好

    我正在一个项目中工作 在特定情况下我必须在错误页面上重定向 为此 我创建了 Error aspx 页面 现在我正在使用 window top location href Error aspx 并生成http localhost app we
  • 当没有行时 RecordNotFound 返回 false

    我有问题这个图书馆 https godoc org github com jinzhu gorm DB RecordNotFound因为即使给定的输入不在数据库中 该函数也会返回 false 而实际上它应该返回 true type User
  • 写入 TcpClient 和 NetworkStream

    我对如何在 net 中使用 tcp 流有点困惑 现在 当我想写40字节时 我将其写入内存流 然后调用ToArray 并将内存流写入网络流 刷新 在服务器端 我使用 Read buf 0 len 并检查长度是否完全符合我的预期 我这样做是不是
  • MYSQL:如何创建一个触发器来根据不同表中的值计算字段值?

    In table A我有田地CENA 价格 cena za kus 每件价格 mnozstvi 数量 In table B我有田地DPH vat 我想添加一个更新 插入之前触发器 它将计算PRICE字段 像这样 price price pe
  • 如何从 HSSFWorkbook 对象获取输入流

    我希望我的 Web 应用程序用户将一些数据下载为 Excel 文件 我有下一个函数在响应对象中发送输入流 public static void sendFile InputStream is HttpServletResponse resp