使用POI同时对Excel文件进行读和写操作时避免Invalid header signatu
来源:互联网 发布:windows的历史 编辑:程序博客网 时间:2024/06/05 21:14
这学期学到了数据库概论,课程设计需要做一个DBMS,图方便想把数据什么的存到xls文件中,在使用poi对excel文件同时进行读和写操作时,如果这样写:
public void test(){ try { File file = new File("user.xls"); FileInputStream in = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(file); HSSFWorkbook workbook = new HSSFWorkbook(in); HSSFSheet sheet = workbook.getSheetAt(0); System.out.println(sheet.getLastRowNum()); workbook.write(fos); fos.close(); in.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
就会出现org.apache.poi.poifs.filesystem.NotOLE2FileException: Invalid header signatu报错
然后在网上看到一个别人写的demo,改了一下:
public void test(){ try { File file = new File("user.xls"); FileInputStream in = new FileInputStream(file); //使用POIFSFileSystem构造HSSFWorkbook POIFSFileSystem fs = new POIFSFileSystem(in); FileOutputStream fos = new FileOutputStream(file); HSSFWorkbook workbook = new HSSFWorkbook(fs); HSSFSheet sheet = workbook.getSheetAt(0); System.out.println(sheet.getLastRowNum()); workbook.write(fos); fos.close(); in.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }就可以了。
看了会源码,水平有限没大看懂。大体是一个在已有的基础上对Excel文件进行解析,另一个则是创建一个Excel文件进行操作。
17.12.11更新
还有一种办法...
public void test(){ try { boolean isSuccess = true; File file = new File("user.xls"); FileInputStream in = new FileInputStream(file); //使用POIFSFileSystem构造HSSFWorkbook POIFSFileSystem fs = new POIFSFileSystem(in); HSSFWorkbook workbook = new HSSFWorkbook(fs); HSSFSheet sheet = workbook.getSheetAt(0); System.out.println(sheet.getLastRowNum()); ... //如果中间有错误 isSuccess = false; if(isSuccess){ FileOutputStream fos = new FileOutputStream(file); workbook.write(fos); } fos.close(); in.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
意思就是,..确保没有错误之后再创建fos流写入数据,如果有错误就不进行写入操作
或者在错误的地方直接return; 跳出这个函数也行, 反正就是不进入写入操作
17.12.12
找到了前几天写的代码,其中有段是如果发生错误直接return出这个函数,当时已经打开了输出流,而未关闭,所以下次再打开的时候就出现Invalid header signatu错误,应该是输出流未正确关闭
阅读全文
0 0
- 使用POI同时对Excel文件进行读和写操作时避免Invalid header signatu
- java使用poi操作excel(读、写)
- 一个使用POI进行Excel多线程写操作的demo
- 使用maven+springmvc+POI对上传的Excel文件进行解析并操作
- java-使用POI对Excel进行读写操作
- Linux下多个进程或线程同时对一个文件进行写操作和access函数
- 使用POI包进行Excel文件操作(1)
- 使用POI包进行Excel文件操作(2)
- 用POI实现对Excel进行操作
- POI对Excel进行读写操作
- Apache POI工具对excel文件操作的简单使用
- 使用poi进行excel比对程序
- 同时对多个文件进行大量写操作对性能优化
- 同时对多个文件进行大量写操作对性能优化
- 使用ITEXT生成pdf文件,使用POI、jxl对excel文件进行读取
- POI读取EXCEL文件的错误(invalid header signature )处理
- 用poi处理excel文件异常:java.io.IOException: Invalid header signature; read 2338042707334752323
- POI读取EXCEL文件的错误 java.io.IOException: Invalid header signature; read 23
- JDBC往MySql数据库中写汉字出现乱码的问题
- Java中的方法重载
- 在OpenCV下利用霍夫变换进行直线检测和圆检测
- Visual Studio 2017 15.5 正式发布,性能再提升
- 【Scikit-Learn 中文文档】预测目标 (y) 的转换
- 使用POI同时对Excel文件进行读和写操作时避免Invalid header signatu
- Lintcode:旋转字符串
- REDIS系列之五大对象原理
- Eclipse隐藏引用的jar包
- Hibernate注解使用入门
- RSA加密与数字签名
- Java需要补充的部分
- Hessian Hello World
- Eclipse优化