easyExcel 在每次调用finish方法之后把workBook对象中存的数据写入到outputStream中,生成一个文件,是否支持finish之后往这个文件里追加的写数据。
[alibaba/easyexcel]easyExcel支持追加写吗 ?
回答
这个我需要排查下,模板太大是否会有问题。建议临时方案就是放到其他地方一次性写入。
这样在数据量大的时候,一次性写入是否会有内存溢出的风险
这个测试了 无解,底层依赖于poi,大文件追加会OOM。 建议临时存储到数据库或者本地文件缓存 ,再追加。
这个测试了 无解,底层依赖于poi,大文件追加会OOM。 建议临时存储到数据库或者本地文件缓存 ,再追加。
没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊
这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。
没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊
意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用java.io中的包先追加写入。
这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。
没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊
意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用java.io中的包先追加写入。
那最终写入到excel的时候不还得读到内存里?
这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。
没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊
意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。
那最终写入到excel的时候不还得读到内存里?
最后就一次读取一行数据,不用全部读取到内存中
这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。
没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊
意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。
那最终写入到excel的时候不还得读到内存里?
最后就一次读取一行数据,不用全部读取到内存中
读取一行数据?那导出的excel不就一行数据么? 你要么简单写一段帮助我理解下?
zhuchao941
这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。
没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊
意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。
那最终写入到excel的时候不还得读到内存里?
最后就一次读取一行数据,不用全部读取到内存中
读取一行数据?那导出的excel不就一行数据么? 你要么简单写一段帮助我理解下?
模拟代码; public static void main(String[] args) { ExcelWriter excelWriter = EasyExcel.write("").build(); WriteSheet sheet = EasyExcel.writerSheet().build();
FileReader fr = null;
BufferedReader br = null;
try {
fr = new FileReader("缓存的文件");
br = new BufferedReader(fr);
String line = null;
while ((line = br.readLine()) != null) {
excelWriter.fill(line, sheet);
}
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
zhuchao941
这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。
没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊
意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。
那最终写入到excel的时候不还得读到内存里?
最后就一次读取一行数据,不用全部读取到内存中
读取一行数据?那导出的excel不就一行数据么? 你要么简单写一段帮助我理解下?
模拟代码; public static void main(String[] args) { ExcelWriter excelWriter = EasyExcel.write("").build(); WriteSheet sheet = EasyExcel.writerSheet().build();
FileReader fr = null; BufferedReader br = null; try { fr = new FileReader("缓存的文件"); br = new BufferedReader(fr); String line = null; while ((line = br.readLine()) != null) { excelWriter.fill(line, sheet); } } catch (FileNotFoundException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } }
那你最终在excelWriter.finish之前 数据不还是全部都在内存里么?只是你读取的时候用了bufferReader,这和我说的不是一个问题。我想问的是分批次刷到磁盘上,不然总会出现内存不够用的情况的
zhuchao941
这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。
没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊
意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。
那最终写入到excel的时候不还得读到内存里?
最后就一次读取一行数据,不用全部读取到内存中
读取一行数据?那导出的excel不就一行数据么? 你要么简单写一段帮助我理解下?
模拟代码; public static void main(String[] args) { ExcelWriter excelWriter = EasyExcel.write("").build(); WriteSheet sheet = EasyExcel.writerSheet().build();
FileReader fr = null; BufferedReader br = null; try { fr = new FileReader("缓存的文件"); br = new BufferedReader(fr); String line = null; while ((line = br.readLine()) != null) { excelWriter.fill(line, sheet); } } catch (FileNotFoundException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } }
那你最终在excelWriter.finish之前 数据不还是全部都在内存里么?只是你读取的时候用了bufferReader,这和我说的不是一个问题。我想问的是分批次刷到磁盘上,不然总会出现内存不够用的情况的
不会全部都在内存中,先去看看easyexcel的文档吧
zhuchao941
这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。
没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊
意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。
那最终写入到excel的时候不还得读到内存里?
最后就一次读取一行数据,不用全部读取到内存中
读取一行数据?那导出的excel不就一行数据么? 你要么简单写一段帮助我理解下?
模拟代码; public static void main(String[] args) { ExcelWriter excelWriter = EasyExcel.write("").build(); WriteSheet sheet = EasyExcel.writerSheet().build();
FileReader fr = null; BufferedReader br = null; try { fr = new FileReader("缓存的文件"); br = new BufferedReader(fr); String line = null; while ((line = br.readLine()) != null) { excelWriter.fill(line, sheet); } } catch (FileNotFoundException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } }
那你最终在excelWriter.finish之前 数据不还是全部都在内存里么?只是你读取的时候用了bufferReader,这和我说的不是一个问题。我想问的是分批次刷到磁盘上,不然总会出现内存不够用的情况的
不会全部都在内存中,先去看看easyexcel的文档吧
大哥 没看过文档会来这提问么 你要回答就答重点 如果有相关文档就帮忙贴一下。前面说了个半天就答了个BufferedReader。。
zhuchao941
这个测试了 无解,底层依赖于poi,大文件追加会OOM。建议临时存储到数据库或者本地文件缓存 ,再追加。
没理解哈 临时存储到数据库有什么用么 最终不还是要写到excel里吗?最终这一步的内存溢出还是没解决啊
意思先别用其他的方式,不用一次性把文件加载到内存的方式,例如你可以先用 java.io 中的包先追加写入。
那最终写入到excel的时候不还得读到内存里?
最后就一次读取一行数据,不用全部读取到内存中
读取一行数据?那导出的excel不就一行数据么? 你要么简单写一段帮助我理解下?
模拟代码; public static void main(String[] args) { ExcelWriter excelWriter = EasyExcel.write("").build(); WriteSheet sheet = EasyExcel.writerSheet().build();
FileReader fr = null; BufferedReader br = null; try { fr = new FileReader("缓存的文件"); br = new BufferedReader(fr); String line = null; while ((line = br.readLine()) != null) { excelWriter.fill(line, sheet); } } catch (FileNotFoundException e) { throw new RuntimeException(e); } catch (IOException e) { throw new RuntimeException(e); } }
那你最终在excelWriter.finish之前 数据不还是全部都在内存里么?只是你读取的时候用了bufferReader,这和我说的不是一个问题。我想问的是分批次刷到磁盘上,不然总会出现内存不够用的情况的
不会全部都在内存中,先去看看easyexcel的文档吧
大哥 没看过文档会来这提问么 你要回答就答重点 如果有相关文档就帮忙贴一下。前面说了个半天就答了个BufferedReader。。
6