1 读取文件
先获取文件 InputStream,以 url 为例
URL url = new URL(destUrl);
HttpURLConnection httpUrl = (HttpURLConnection) url.openConnection();
httpUrl.connect();
InputStream inputStream = httpUrl.getInputStream();
2 解压 GZIP 文件
使用 java.util.zip 包的 GZIPInputStream 可以解压 GZIP 文件。只需先获取待解压的 InputStream,然后再 new 一个 GZIPInputStream 对象,就可以获得解压后的 InputStream
GZIPInputStream bis = new GZIPInputStream(inputStream);
3 InputStream 转 Reader
获取 InputStream 后,如果还要对他进行下一步操作,可以直接对其读取,不用先存成文件再从文件读。
InputStreamReader isr = new InputStreamReader(bis);
4 读取 csv
使用 org.apache.commons.csv 解析 csv 文件
pom 依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.5</version>
</dependency>
先定义表头数组,方便之后按表头取值
static final String[] FILE_HEADER = new String[]{"date", "file_id", ……};
新建 CSVFormat,加上 withSkipHeaderRecord() 以免将第一行表头也当作数据读取了
CSVFormat format = CSVFormat.DEFAULT.withHeader(FILE_HEADER).withSkipHeaderRecord();
format.parse 将 Reader 里的数据转换为 CSVRecord
Iterable<CSVRecord> records = format.parse(isr);
迭代 CSVRecord 通过 get 表头取值
for (CSVRecord record : records) {
String fileId = record.get("file_id");
……
}