高效读取大数据文本文件(上亿行数据)
来源:互联网 发布:淘宝加购 编辑:程序博客网 时间:2024/05/21 00:46
package com.gqshao.file.util;import com.google.common.collect.Lists;import com.google.common.collect.Maps;import com.gqshao.file.io.BufferedRandomAccessFile;import org.apache.commons.io.IOUtils;import org.apache.commons.lang3.StringUtils;import java.io.*;import java.util.List;import java.util.Map;public class FileUtil { /** * 通过BufferedRandomAccessFile读取文件,推荐 * * @param file 源文件 * @param encoding 文件编码 * @param pos 偏移量 * @param num 读取量 * @return pins文件内容,pos当前偏移量 */ public static Map<String, Object> BufferedRandomAccessFileReadLine(File file, String encoding, long pos, int num) { Map<String, Object> res = Maps.newHashMap(); List<String> pins = Lists.newArrayList(); res.put("pins", pins); BufferedRandomAccessFile reader = null; try { reader = new BufferedRandomAccessFile(file, "r"); reader.seek(pos); for (int i = 0; i < num; i++) { String pin = reader.readLine(); if (StringUtils.isBlank(pin)) { break; } pins.add(new String(pin.getBytes("8859_1"), encoding)); } res.put("pos", reader.getFilePointer()); } catch (Exception e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(reader); } return res; } /** * 通过RandomAccessFile读取文件,能出来大数据文件,效率低 * * @param file 源文件 * @param encoding 文件编码 * @param pos 偏移量 * @param num 读取量 * @return pins文件内容,pos当前偏移量 */ public static Map<String, Object> readLine(File file, String encoding, long pos, int num) { Map<String, Object> res = Maps.newHashMap(); List<String> pins = Lists.newArrayList(); res.put("pins", pins); RandomAccessFile reader = null; try { reader = new RandomAccessFile(file, "r"); reader.seek(pos); for (int i = 0; i < num; i++) { String pin = reader.readLine(); if (StringUtils.isBlank(pin)) { break; } pins.add(new String(pin.getBytes("8859_1"), encoding)); } res.put("pos", reader.getFilePointer()); } catch (Exception e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(reader); } return res; } /** * 使用LineNumberReader读取文件,1000w行比RandomAccessFile效率高,无法处理1亿条数据 * * @param file 源文件 * @param encoding 文件编码 * @param index 开始位置 * @param num 读取量 * @return pins文件内容 */ public static List<String> readLine(File file, String encoding, int index, int num) { List<String> pins = Lists.newArrayList(); LineNumberReader reader = null; try { reader = new LineNumberReader(new InputStreamReader(new FileInputStream(file), encoding)); int lines = 0; while (true) { String pin = reader.readLine(); if (StringUtils.isBlank(pin)) { break; } if (lines >= index) { if (StringUtils.isNotBlank(pin)) { pins.add(pin); } } if (num == pins.size()) { break; } lines++; } } catch (Exception e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(reader); } return pins; }}
http://sgq0085.iteye.com/blog/2215318
0 0
- 高效读取大数据文本文件(上亿行数据)
- 通过cmd命令读取大文本文件的行数
- 读取大文本文件
- 关于读取大文本文件
- java读取大文本文件
- php 读取文本文件到行数组
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组 (转)
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- 【转载】C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- Java EE 8 将支持 SSE 服务器端事件
- 使用python进行web抓取
- Bigpipe学习笔记和java版实现
- JAVA中instanceof的作用和用法
- .ftl文件 是什么文件
- 高效读取大数据文本文件(上亿行数据)
- 凌科芯安浅谈数字电视系统条件接收技术
- serialVersionUID
- jsp showModalDialog父子窗口传值
- JS正则表达式获取分组内容实例
- 多线程同步的巧用
- 在什么情况下Java比C++快?
- disruptor:CAS实现高效(伪)无锁阻塞队列实践
- actor Java 实现