首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >下载一个压缩包,解压CSV并解析它--全部在内存中-- Java

下载一个压缩包,解压CSV并解析它--全部在内存中-- Java
EN

Stack Overflow用户
提问于 2017-09-13 03:28:06
回答 2查看 1.4K关注 0票数 0

我有一个包含.CSV文件的.zip文件的URL。

我正在用Java语言编写一个应用程序,它需要下载这个.zip文件,访问.zip中的CSV文件,并使用Apache Commons CSV在CSVRecords列表中解析它们。我不想把任何文件写到磁盘上,因为这是性能上的浪费。

这就是我到目前为止所拥有的(我现在省略了所有的错误处理,它只是一个POC):

代码语言:javascript
复制
URL url = new URL(myURLString);
InputStream input = url.openStream();
ZipInputStream zipIn = new ZipInputStream(input);
ZipEntry entry;
while((entry = zipIn.getNextEntry()) != null) {
    InputStreamReader isr = new InputStreamReader(zipIn);
    CSVParser csv = new CSVParser(isr, CSVFormat.DEFAULT);
    List<CSVRecord> records = csv.getRecords(); <----- THIS IS WHERE IT HANGS!
}

由于某些原因,我不明白为什么当CSVParser试图读取文件时它会挂起。任何帮助都是非常感谢的!

附注:当CSV不在拉链中时,我可以很好地阅读它,因此:

代码语言:javascript
复制
URL url = new URL(myURLString);
InputStream input = url.openStream();
InputStreamReader reader= new InputStreamReader(input );
CSVParser csv = new CSVParser(reader, CSVFormat.DEFAULT);
List<CSVRecord> records = csv.getRecords();
EN

回答 2

Stack Overflow用户

发布于 2017-09-13 12:06:23

也许可以尝试使用不同的解析器。使用univocity-parsers可能会报告处理文件时出现的任何错误。

只需更改为:

代码语言:javascript
复制
URL url = new URL(myURLString);
InputStream input = url.openStream();
ZipInputStream zipIn = new ZipInputStream(input);
ZipEntry entry;
//configure the parser to detect the CSV format automatically
CsvParserSettings parserSettings = new CsvParserSettings();
parserSettings.detectFormatAutomatically();
//use this if the files are small (less than 50mb each)
//parserSettings.setReadInputOnSeparateThread(false);

CsvParser csv = new CsvParser(parserSettings);

while((entry = zipIn.getNextEntry()) != null) {
    InputStreamReader isr = new InputStreamReader(zipIn);
    List<Record> records = csv.parseAllRecords(isr);
}

希望能有所帮助。

免责声明:我是这个库的作者。它是开源和免费的(Apache2.0许可证)

票数 1
EN

Stack Overflow用户

发布于 2018-09-12 03:58:20

我已经写了一个支持你的用例的库unzip-csv。它甚至可以解压归档文件中的特定文件(下载片段),还支持多线程工作程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46184001

复制
相关文章

相似问题

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