Java如何读取和操作上G文本数据
在处理文本时,经常遇到超过1g存储的数据,直接简单的读取,可能遇到java空间不足的问题,为解决此问题,可将大文本数据按照行进行切分为很多块,并将每一块存储为一个文本。然后单独去操作每一个小文本,比如,我所做的分词,便是利用此原理。所要分词的文本是几个G,所有我将这样一个大文本切割成一个一个的小文本,接着对每个小文本进行分词。
public class BigDataRead {/** author:合肥工业大学 管院学院 钱洋 * email:1563178220@qq.com*/public static void main(String[] args) throws IOException {long timer = System.currentTimeMillis(); int bufferSize = 20 * 1024 * 1024;//设读取文件的缓存为20MB //建立缓冲文本输入流 File file = new File("I:/qianyang/预测数据/user_contentdetection_qianyang"); FileInputStream fileInputStream = new FileInputStream(file); BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);//注意这里有时会乱码,根据自己的文本存储格式,进行调整InputStreamReader inputStreamReader = new InputStreamReader(bufferedInputStream,"utf-8"); BufferedReader input = new BufferedReader(inputStreamReader, bufferSize); //要分割的块数减一,这里表示分割为31个文件 int splitNum = 30; //12046表示我的输入本文的行数,我的文本12046行,由于每行文本较长,所有存储占用较大int fileLines = 12046;//分割后存储每个块的行数long perSplitLines = fileLines / splitNum; for (int i = 0; i <= splitNum; ++i){ //分割 //每个块建立一个输出 BufferedWriter output = new BufferedWriter( new OutputStreamWriter( new FileOutputStream( new File("I:/qianyang/预测数据/分块/part" + i + ".txt")),"gbk"));String line = null; //逐行读取,逐行输出 for (long lineCounter = 0; lineCounter < perSplitLines && (line = input.readLine()) != null; ++lineCounter) { output.append(line + "\r"); } output.flush(); output.close(); output = null; } input.close(); timer = System.currentTimeMillis() - timer; //我的1.6g数据不要1分钟,分割完毕System.out.println("处理时间:" + timer); }}
操作结果如下图所示,将一个文本切分成了一个一个的小文本:
Java如何读取和操作上G文本数据相关推荐
- 使用Java 8 Stream像操作SQL一样处理数据(上)
转载自 使用Java 8 Stream像操作SQL一样处理数据(上) 几乎每个Java应用都要创建和处理集合.集合对于很多编程任务来说是一个很基本的需求.举个例子,在银行交易系统中你需要创建一个集合来 ...
- java 操作 word 表格和样式,java读取word表格中的表格 java如何读取word中的excel表格数据...
Java 利用poi 可以直接读取word中的表格保持样式生1.读取word 2003及word 2007需要的jar包 读取 2003 版本(.doc)的word文件相对来说比较简单,只需要 poi ...
- 从mysql数据库读取Blob_读取数据库Blob类型的文本数据
开发一个查询功能时,遇到了一个ORM的问题:数据库字段是 Blob 类型,里面实际存储的是文本数据,Java 后端代码中用字符串 String 类型去接收这个字段的数据时,报错,提示没有对应的sett ...
- java中读取某路径下的文本内容
path也就是文本存储的路径和文本名称,这个只是个人需要,一般的话,只需要在File file = new File(path);中把path替换成自己的路径就可以了,比如File file = ne ...
- java循环读取ftp服务器上面的文件
公司新项目需要在ftp服务器上读取文件保存到数据库,所以学习了一下怎么读取 项目采用的是springboot框架,首先需要在pom文件中加入comment.net jar包依赖 <!-- 读取f ...
- app上传文本数据到服务器的实现
一.目标 将app客户端用户填写的地点和描述信息上传到服务器. 二.流程 1.界面设计,两个TextView用来提醒用户该输入什么信息,两个EditText让用户输入文本信息,一个Button用来提交 ...
- (Java数据库编程基础操作)Statement实现数据查询操作
Statement实现数据查询操作 在整个数据库的开发过程之中数据的查询操作是最复杂的,因为查询会牵扯到各种复杂查询的管理,例如:多表查询.子查询.统计查询.集合操作等等,但是从现代的开发来讲,对于数 ...
- JAVA一次性读取Mysql几十万条大数据的处理
前言 不用说也知道,一次性读取出那么大的数据是疯了吗,虚拟机能承受的聊那么大的对象吗?,所以我们需要分批进行读取. 下面是使用fenduan 每1万条进行一次读取执行 1.传入总数和每多少进行分段 制 ...
- java代码读取到excel的两列数据,进行相乘得到新的数据
具体的怎么读取excel,请看我的另外一篇http://blog.csdn.net/anmoyyh/article/details/75050438 例如某个表格的第7列为价格,第8列为折扣,在读取到 ...
最新文章
- a标签跳页传参,以及截取URL参数
- 大连网络推广浅谈网站过度优化的表现以及解决方法!
- 借evdev之力 Linux全局热键魔改造
- C#中的默认访问修饰符
- cookie的设置和获取
- ios 代码设置控件宽高比_iOS--利用比例纯代码适配屏幕大小
- POJ 2965 开冰箱的门(回溯)
- 余承东:华为Mate 30 RS保时捷设计 9月19日发布
- 一周随笔--15.10.06
- JVM学习总结四——内存分配策略
- 【运动检测】基于matlab最大互信息运动目标检测【含Matlab源码 1607期】
- 微软的APT服务器探针产品,原子探针断层扫描| APT | EAG实验室
- GAMES101-现代计算机图形学入门-闫令琪——Lecture 18 Advanced Topics in Rendering 学习笔记
- 如何在 Visual Paradigm 上执行静默安装
- 菜鸟教程中的面试题总结
- JMeter常用函数整理
- 计算机网络实验之验证性实验
- diamond 学习
- CC++笔面试知识点
- 没有实习经验的应届生如何找到一份数据分析类工作?