- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试基于通用模板生成新的 Excel 文件。我正在打开模板 Excel 文件,对其进行编辑并将其保存在新位置。为了写入文件,我使用 FileOutputStream 并在写入后关闭流以保存它。整个过程工作正常,但新创建的 Excel 文件未正确保存。我的模板文件有 35kb,而我新创建的 Excel 文件仅显示 30kb。当我打开新创建的 Excel 文件时,我可以看到写入的数据,我需要保存它并关闭它以反射(reflect) 36kb 的正确大小。
新的 Excel 需要上传到外部应用程序,直接上传 30kb 未保存的 Excel 时显示“未找到数据”,而 36kb 保存的文件成功上传文件。
我尝试了互联网上建议的各种不同方法来完成同样的事情,但它们都没有生成正确的 Excel 文件。我使用的是 java 1.7 和 apache-poi 版本 3.17。
以下是我的代码示例:-
public void createExcelFiles() throws ParseException, IOException {
File file = new File(ExcelTemplatePath);
FileInputStream fip = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(excelOutputFile);
XSSFWorkbook workbookOld = new XSSFWorkbook(fip);
try (SXSSFWorkbook workbook = new SXSSFWorkbook(workbookOld, rowAccessWindowSize)) {
if (makeLargeFiles) {
SXSSFSheet sheet = (SXSSFSheet) workbook.getSheetAt(0);
makeExcelFile.makeLargeFile(sheet);
workbook.write(fos);
} else {
Sheet sheet = workbookOld.getSheetAt(0);
makeExcelFile.makeNormalFile(sheet);
workbookOld.write(fos);
}
fos.close();
fip.close();
workbook.close();
}
workbookOld.close();
}
最佳答案
像 XSSFWorkbook
这样的包装 I/O 流应该首先关闭,可能仍在向包装的 OutputStream 写入尾声。并且低层流可能被关闭。
请注意,某些包装类会在自己的 close
内自行关闭包装的流。
由于 try-with-resources 是理想的,为了在出现异常时也关闭,最终版本将是:
public void createExcelFiles() throws ParseException, IOException {
File file = new File(ExcelTemplatePath);
try (FileInputStream fip = new FileInputStream(file);
FileOutputStream fos = new FileOutputStream(excelOutputFile);
XSSFWorkbook workbookOld = new XSSFWorkbook(fip);
SXSSFWorkbook workbook = new SXSSFWorkbook(workbookOld, rowAccessWindowSize)) {
if (makeLargeFiles) {
SXSSFSheet sheet = (SXSSFSheet) workbook.getSheetAt(0);
makeExcelFile.makeLargeFile(sheet);
workbook.write(fos);
} else {
Sheet sheet = workbookOld.getSheetAt(0);
makeExcelFile.makeNormalFile(sheet);
workbookOld.write(fos);
}
}
// Doing in reverse order of declaration:
// 1. workbook.close();
// 2. workbookOld.close();
// 3. fos.close();
// 4. fip.close();
}
在您的代码中出现了逆转,并且通过 try-with-resources 显式地发生了关闭。
关于java - 即使在执行 fileoutputstream.close() 之后,Apache-POI 也不保存 Excel 工作簿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56358431/
我查看了 FileOutputStream 的 java 文档 http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.ht
在我的 Java 应用程序中,我创建了线程,其中使用包含在 BufferedInputStream 和 BufferedOutputStream 中的 FileOutputStream 和 FileI
我希望这是一个直接的设计问题。 上下文: 我可能正在通过套接字连接下载一个到多个文件。当从套接字读取字节[]时,我正在传递它们。我还知道将这些字节写入哪个文件。我将这些字节附加到文件中 FileOut
我正在尝试编写一个简单的测试方法来将文件从 Asset 文件夹复制到 sd 卡。当我尝试打开 SD 卡上的文件时,它崩溃了。 代码 try { // POp
目标是对硬编码的 log4j Appender 进行功能测试,该 Appender 扩展了 RollingFileAppender,其中我可以使用 MyAppender 重现写入同一文件的 log4j
这里是我如何将字节写入文件。我正在使用 FileOutputStream private final Handler handler = new Handler(){
如何解决这个问题? 我收到以下错误:关闭此“FileOutputStream”。但我已经在finally block 中关闭了它 public void initHistoryForOldFile(F
我过去曾遇到过此错误,但从未完全理解它。关闭 OutputStream 后,无论 java 文件的位置或其调用方式如何,所有顺序运行或写入另一个文件的尝试都会完全搞砸,即使使用不同的写入文件的方法也是
我正在尝试创建跨 JVM 锁。为了做到这一点,我想在远程 Linux 服务器中的某个位置创建一个 java.io.FileOutputStream,如下所示: some_remote_server.m
我正在制作一个包含文件复制的应用程序,但是当我浏览一个大目录(1000+)文件并将它们复制到另一个文件夹时,它使用 290+ MB 的 RAM。 那么,有没有办法在不创建 FileOutoutStre
我在 Java 中使用 FileOutputStream 和 BufferedWriter 时遇到了问题。 如果我的磁盘空间已满并且我正在尝试写入,它将抛出IOException(这是正确的),但是当
我有一个 FileOutputStream 和一个像这样的 cicle: PrintStream output = new PrintStream(new FileOutputStream("XXXX
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我有一个FileOutputStream。我想“保存”此文件并为其指定一个保存在资源文件夹中的自己的图标。 代码如下: ObjectOutputStream oout = new Ob
这个问题已经有答案了: How to write data with FileOutputStream without losing old data? (2 个回答) 已关闭 7 年前。 您好,我正
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
目前我的代码中遇到 FileOutputStream 问题,使用 FileOutputStream 在磁盘中创建文件。创建文件后,无法从其位置打开、删除或移动文件,已经收到错误消息被其他用户锁定当网络
我正在尝试编写一个程序,将正弦波的数据保存到 .txt 中,但是当我执行该程序时,它写的内容比应有的少(有时甚至什么也不写)。这是代码: public static void main(String[
我在使用以下代码时遇到问题。我正在尝试写入 .ppm 文件,并且得到 Red.java:6: unreported exception java.io.FileNotFoundException; m
我正在从网络下载数据库,该数据库大小在 100 KB 到 500 KB 之间。这是我的代码(删除了无用的代码): URLConnection uConnection = downloadUrl.ope
我是一名优秀的程序员,十分优秀!