在处理文本时,经常遇到超过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文本数据相关推荐

  1. 使用Java 8 Stream像操作SQL一样处理数据(上)

    转载自 使用Java 8 Stream像操作SQL一样处理数据(上) 几乎每个Java应用都要创建和处理集合.集合对于很多编程任务来说是一个很基本的需求.举个例子,在银行交易系统中你需要创建一个集合来 ...

  2. java 操作 word 表格和样式,java读取word表格中的表格 java如何读取word中的excel表格数据...

    Java 利用poi 可以直接读取word中的表格保持样式生1.读取word 2003及word 2007需要的jar包 读取 2003 版本(.doc)的word文件相对来说比较简单,只需要 poi ...

  3. 从mysql数据库读取Blob_读取数据库Blob类型的文本数据

    开发一个查询功能时,遇到了一个ORM的问题:数据库字段是 Blob 类型,里面实际存储的是文本数据,Java 后端代码中用字符串 String 类型去接收这个字段的数据时,报错,提示没有对应的sett ...

  4. java中读取某路径下的文本内容

    path也就是文本存储的路径和文本名称,这个只是个人需要,一般的话,只需要在File file = new File(path);中把path替换成自己的路径就可以了,比如File file = ne ...

  5. java循环读取ftp服务器上面的文件

    公司新项目需要在ftp服务器上读取文件保存到数据库,所以学习了一下怎么读取 项目采用的是springboot框架,首先需要在pom文件中加入comment.net jar包依赖 <!-- 读取f ...

  6. app上传文本数据到服务器的实现

    一.目标 将app客户端用户填写的地点和描述信息上传到服务器. 二.流程 1.界面设计,两个TextView用来提醒用户该输入什么信息,两个EditText让用户输入文本信息,一个Button用来提交 ...

  7. (Java数据库编程基础操作)Statement实现数据查询操作

    Statement实现数据查询操作 在整个数据库的开发过程之中数据的查询操作是最复杂的,因为查询会牵扯到各种复杂查询的管理,例如:多表查询.子查询.统计查询.集合操作等等,但是从现代的开发来讲,对于数 ...

  8. JAVA一次性读取Mysql几十万条大数据的处理

    前言 不用说也知道,一次性读取出那么大的数据是疯了吗,虚拟机能承受的聊那么大的对象吗?,所以我们需要分批进行读取. 下面是使用fenduan 每1万条进行一次读取执行 1.传入总数和每多少进行分段 制 ...

  9. java代码读取到excel的两列数据,进行相乘得到新的数据

    具体的怎么读取excel,请看我的另外一篇http://blog.csdn.net/anmoyyh/article/details/75050438 例如某个表格的第7列为价格,第8列为折扣,在读取到 ...

最新文章

  1. a标签跳页传参,以及截取URL参数
  2. 大连网络推广浅谈网站过度优化的表现以及解决方法!
  3. 借evdev之力 Linux全局热键魔改造
  4. C#中的默认访问修饰符
  5. cookie的设置和获取
  6. ios 代码设置控件宽高比_iOS--利用比例纯代码适配屏幕大小
  7. POJ 2965 开冰箱的门(回溯)
  8. 余承东:华为Mate 30 RS保时捷设计 9月19日发布
  9. 一周随笔--15.10.06
  10. JVM学习总结四——内存分配策略
  11. 【运动检测】基于matlab最大互信息运动目标检测【含Matlab源码 1607期】
  12. 微软的APT服务器探针产品,原子探针断层扫描| APT | EAG实验室
  13. GAMES101-现代计算机图形学入门-闫令琪——Lecture 18 Advanced Topics in Rendering 学习笔记
  14. 如何在 Visual Paradigm 上执行静默安装
  15. 菜鸟教程中的面试题总结
  16. JMeter常用函数整理
  17. 计算机网络实验之验证性实验
  18. diamond 学习
  19. CC++笔面试知识点
  20. 没有实习经验的应届生如何找到一份数据分析类工作?

热门文章

  1. 【抓包工具】实战:WireShark 捕获过滤器的超全使用教程
  2. 【数字设计】沐曦科技_笔试题目分享
  3. 在经贸,有一种爱叫做放手
  4. GooglePlus API的iOS调试心得
  5. .NET CORE 下收发邮件之 MAILKIT
  6. ndk开发字符串转十六进制!音视频时代你还不会NDK开发?已拿offer
  7. week 14 限时模拟(猫睡觉问题)
  8. 使用Onekey Ghost安装器一键还原系统的方法
  9. ssm练习第二天_项目拆分moudle_基本增删改查_批量删除_一对一级联查询
  10. Windows11无法使用PIN码进入系统