读取大文本文件

目录

  • 大容量文件读写并统计

    • #思路
    • io流的初始化
    • Treemap的建立和读取起点
    • 判断是否为出现最多
  • 结果
  • 参考

大容量文件读写并统计

https://www.cnblogs.com/outmanx/p/9694493.html

在这个项目的基础上,我稍作了修改,并能让程序进行低占存的大文本文件读写,并统计出行数和出现最多的字符串


#思路

参考https://www.cnblogs.com/zhujiabin/p/5660541.html的思路,通过RandomAccessfile的类方法进行读取文件,会比一般的方法快很多,再用bufferwriter把得到的结果写进txt中


io流的初始化

private static String url = "E:\新建文件夹\something.txt";

private static String nurl = "E:\新建文件夹\output.txt";

RandomAccessFile fis = new RandomAccessFile(url,"r");

BufferedWriter bw = new BufferedWriter(new FileWriter(nurl));

Treemap的建立和读取起点

.//创建treemap树将键值的判断用来得到数值的累积以达到统计的目的

>.TreeMap < String, Integer> tm = new TreeMap<>();

String a = null ;

String g = null;

int getline=0;

//重点,seek方法将文件的起始读取节点

fis.seek(0);

之后为完成分割字符串的功能,我找了很久,找不到完美的方法,最后无可奈何只能把范围限定在英文内,并且必须是以逗号为分割,通过split方法将字符串分开并储存在数组中。

//通过readline方法读取方便又快捷,把读取到的东西赋值给a,创建g字符串将编码改为gbk编码

while((a=fis.readLine())!=null) {

getline++;

g=new String(a.getBytes("ISO-8859-1"), "gbk");

String[] idArr = g.split(",");

String mid = null;

for(int i =0;i < idArr.length;i++) {

mid = idArr[i];

//if的判断来判断键值的累积

if(!tm.containsKey(mid)) {

tm.put(mid, 1);

}

else {

tm.put(mid, tm.get(mid)+1);

}

}

}


判断是否为出现最多

for(String key:tm.keySet()) {

//选择key值,在任意情况下,把得到的数值赋值给sumch,在下一次比较中赋值给sumch1,通过max方法比较大小,如果大就把当前的键值赋值给已经设置好的变量中,此方法的弊端就在于只能够获取其中一个键值,如果有多个字符串出现次数相等,只能得到其中一个

switch (key) {

default:

sumch1=sumch;

sumch=tm.get(key);

maxnum=max(sumch1,sumch);

if(sumch>sumch1) {

akey=key;

}

break;

}

}

结果

由于20mb的文件需要大约3-4分钟时间,所以我随便找了个jar包来读取,由于编码原因,读取到的全是乱码,但读取速度在10s内。并且可以统计最多的字符

这是通过代码在命令行内得到的结果

参考

https://www.cnblogs.com/zhujiabin/p/5660541.html RandomAccessfile的使用

https://blog.csdn.net/sun5769675/article/details/50204591 split方法

原文地址:https://www.cnblogs.com/outmanx/p/9736213.html

时间: 2024-10-06 18:28:44

读取大文本文件的相关文章

C#读取大文本文件

今天偶遇一同事抱怨,sqlserver导出的CSV,明明有1000W条,但用excel打开就只剩100W了,足足消失了90%,所以她怀疑文件是足量的1000W条,是excel捣了鬼.可是文件容量有2G+,用记事本打不开,如何证明CSV文件没有缺少数据,这可难坏了他. 好吧,本着不看其他轮子,有问题自己造一个的原则,我决定用控制台程序写一个简易读取程序,具体CODE如下: using System; using System.Collections.Generic; using System.Li

java读取大文本文件

原文:http://blog.csdn.net/k21325/article/details/53886160 小文件当然可以直接读取所有,然后放到内存中,但是当文件很大的时候,这个方法就行不通了,内存不是这么玩的~~ 那么,下面是解决方法: 1.Java底层:调用java的java.util.Scanner类扫描文件内容,一行一行,连续读取 FileInputStream inputStream = null; Scanner sc = null; try { inputStream = ne

集算器并行处理大文本文件的示例

集算器可以方便地用并行方式处理大文本文件,下面通过一个例子来说明使用方法. 假设有个一千万条销售记录的文本文件sales.txt,其主要字段是SellerID(销售员).OrderDate(订单日期).Amount(订单金额),请计算每个销售员在近四年里的大订单总金额.其中,金额在2000以上的属于大订单. 要进行并行处理,首先要能对文件进行分段,集算器提供了游标数据对象cursor及其函数,可以方便地分段读取大文本文件.比如file("e:/sales.txt")[email pro

Java读写大文本文件(2GB以上)

如下的程序,将一个行数为fileLines的文本文件平均分为splitNum个小文本文件,其中换行符'r'是linux上的,windows的java换行符是'\r\n': package kddcup2012.task2.FileSystem; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import 

Java多线程读取大文件

前言 今天是五一假期第一天,按理应该是快乐玩耍的日子,但是作为一个北漂到京师的开发人员,实在难想出去那玩耍.好玩的地方比较远,近处又感觉没意思.于是乎,闲着写篇文章,总结下昨天写的程序吧. 昨天下午朋友跟我聊起,他说有个需求,需要把上G的txt文件读取写入到数据库.用普通的io结果自然是OOM了,所以果断用NIO技术.为了提高速度,自然还得用上多线程技术. 接下来就介绍一下实现思路以及相关的知识点. 内容 一.对文件分区 为了充分利用多线程读取,就需要把文件划分成多个区域,供每个线程读取.那么就

R实现大文本文件数据分组汇总的方法

使用R语言对文件数据分组汇总是很普遍的操作,但有时我们会遇到比较大的文件,这类文件的计算结果较小,但源数据太大,无法全部放入内存进行计算,只能采用分批读取.分批计算.拼合结果的办法来解决.下面用一个例子来说明R实现大文件数据分组汇总的方法. 有个1G的文件sales.txt,存储着大量订单记录,我们要对CLIENT字段分组并对AMOUNT字段汇总.该文件的列分割符为"\t",前几行数据如下: R语言解决方案     con <- file("E: \\sales.txt

c#分页读取GB文本文件实例

本文实例讲述了c#分页读取GB文本文件的方法.分享给大家供大家参考.具体如下: 一.应用场景: ① .我在做BI开发测试的时候,有可能面对source文件数GB的情况,如果使用一般的文本编辑器,则会卡死,或要等很久才能显示出来. ② .有时候,我们使用ascii(01)或ascii(02)作为行或列的分隔符,这样的临时文件用于导数据到DB,如果文件导入过程中有错误,需要查看文件 的时候,普通的编辑器不支持换行,则会很恐怖. 为解决这两个需求,我使用c#完成了一个简单的winform的应用程序.

(整理二)读取大日志文件

一般读取文件有三种方式: 1.读取到内存中: 2.分块读取: 3.采用内存映射技术. 一.读取到内存中 此种方式比较适合小文件,可以通过文件流的方式直接读取到内存中进行处理. 二.分块读取 当文件很大时(特别是文件大小大于内存大小),读取到内存中就很不合理.这种时候,我们可以将文件进行分块,然后进行分块读取. 1 /// <summary> 2 /// 读取大文件方法 3 /// </summary> 4 /// <param name="initialPath&q

php使用file函数、fseek函数读取大文件效率分析

php读取大文件可以使用file函数和fseek函数,但是二者之间效率可能存在差异,本文章向大家介绍php file函数与fseek函数实现大文件读取效率对比分析,需要的朋友可以参考一下. 1. 直接采用file函数来操作 由于 file函数是一次性将所有内容读入内存,而PHP为了防止一些写的比较糟糕的程序占用太多的内存而导致系统内存不足,使服务器出现宕机,所以默认情况下限制只能最大使用内存16M,这是通过php.ini里的 memory_limit = 16M 来进行设置,这个值如果设置-1,