`
zcwfeng
  • 浏览: 98207 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

java读取大文件1G+

阅读更多

正常读取大文件,可能会想到用缓存

如:

package base;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;

public class ReadBigFile {

public static void readBigFile(String path) {
BigInteger sum;
try {
File file = new File(path);
BufferedInputStream fis = new BufferedInputStream(
new FileInputStream(file));
BufferedReader reader = new BufferedReader(new InputStreamReader(
fis, "utf-8"), 5 * 1024 * 1024);// 用5M的缓冲读取文本文件

String line = "";
sum = BigInteger.ZERO;
while ((line = reader.readLine()) != null) {
sum = sum.add(BigInteger.ONE);

}

System.out.println(sum);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) {
readBigFile("H:/TDDOWNLOAD/TEST.txt");
}

}


但是为了统计等,更加有效率,采用流的方式


public class ReadBigFile2 {

// 统计指定文件中的字符的总数,其中:fileName指的是文件的全路径
public static long xermote(String fileName) {
FileReader reader = null;
try {
reader = new FileReader(fileName);
// 创建分析给定字符流的标记生成器
StreamTokenizer stn = new StreamTokenizer(
new BufferedReader(reader));// 根据给定的字符流创建标记生成器stn
// 下面指定单引号、双引号和注释的转义字符在此标记生成器中是普通字符,不代表其他的特殊的含义
stn.ordinaryChar('\'');
stn.ordinaryChar('\"');
stn.ordinaryChar('/');
// 创建可以统计字符总数的各个变量
String str;
int num_sum = 0;// 用于统计数字字符总数的变量
int word_sum = 0;// 用于统计字母、汉字等字符总数的变量
int sym_sum = 0;// 用行统计标点符号等字符总数的变量
int sum = 0;// 用于计算全部种类字符总数的变量
// 当生成器的下一个标记不是流末尾的常量
while (stn.nextToken() != StreamTokenizer.TT_EOF) {
switch (stn.ttype) {// 来判断当前获取的流的标记类型
// TT_EOL指示已读到行末尾的常量。
case StreamTokenizer.TT_EOL:
break;
// TT_NUMBER指示已读到一个数字标记的常量
case StreamTokenizer.TT_NUMBER:
str = String.valueOf((stn.nval));// stn.nval表示此数字标记的值
num_sum += str.length();
break;
// TT_WORD指示已读到一个文字标记的常量
case StreamTokenizer.TT_WORD:
// str = stn.sval;// stn.sval表示此文字标记的值
str = "\\x01\\x02";
word_sum += str.length();
break;
default:
// 如果以上3中类型都不是,则为英文的标点符号
str = String.valueOf((char) stn.ttype);
sym_sum += str.length();
}
}
System.out.println("数字标记的和为:" + num_sum);
System.out.println("文字标记的和为: " + word_sum);
System.out.println("标点符号标记的和为: " + sym_sum);
sum = sym_sum + num_sum + word_sum;
System.out.println("此文件中的字符总数为: " + sum);

return sum;
} catch (Exception e) {
e.printStackTrace();
return -1;
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
}

public static void main(String[] args) {
String fileName = "H:/TDDOWNLOAD/迅雷相关/迅雷网邻/P2P Seacher/movie/test.txt";
System.out.println("统计文件" + fileName + "中的字符数的结果如下:");
ReadBigFile2.xermote(fileName);
}
}
分享到:
评论

相关推荐

    java nio 包读取超大数据文件

    Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据...

    SAXParser-用SAX读取大于100M的xml文件(java)

    压缩包里面有两个文件:SAX.java和SAXparse.java 用来解析大于100M的xml文件,SAX读取xml不同于DOM方式,DOM方式在解析xml前需要全部加载xml文件,当...适合读取大的xml文件,例如大于100M甚至大于1G的xml数据库文件。

    Java 大文件读取排序

    NULL 博文链接:https://royzhou1985.iteye.com/blog/775550

    java 文件指纹读取

    /*获取指定路径下文件的SHA1值*/ public static String getFileSHA256(String filename);/*获取指定路径下文件的SHA-256值*/ public static String getFileSHA384(String filename);/*获取指定路径下文件的SHA-384...

    大文件分片合并上传 feign调用

    调用feign上传大文件 1G报oom异常,通过将大文件分片,转成字节byte到合并端随机读写,合成大文件zip

    tika读取文件专用包

    tika读取文件所用jar包,包含各种文件类型所用jar

    java web 开发技术大全光盘文件(part03)

    由于上传权限只有20M所以打成了5个rar包(java web 开发技术大全光盘文件(part01...文件名为Java Web (G).part1.rar、Java Web (G).part2.rar、Java Web (G).part3.rar、Java Web (G).part4.rar、Java Web (G).part5.rar...

    java多线程下载

    1.得到服务器下载文件的大小,然后在本地设置一个临时文件和服务器端文件大小一致 a)获得访问网络地址 b)通过URL对象的openConnection()方法打开连接,返回一个连接对象 c)设置请求头 i.setRequestMethod ii....

    java绘制音频波形图

    g.drawLine(i * this.getWidth() / 256, drawl[i] + 100, (i + 1) * this.getWidth() / 256, drawl[i + 1] + 100); } } } /* * (non-Javadoc) * * @see java.lang.Runnable#run() */ ...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    1.匹配图象; 2 匹配email地址; 3 匹配匹配并提取url ; 4 匹配并提取http ; 5.匹配日期 6 匹配电话; 7 匹配身份证 8 匹配邮编代码 9. 不包括特殊字符的匹配 (字符串中不包括符号 数学次方号^ 单引号' 双引号" ...

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    大文件流:使用流处理方法读取大文件的POC应用程序

    POC应用程序以流处理方法读取大文件 实施细节 实施了两种方法: 流:具有背压的简单缓冲以及与akka actor的聚合 Kafka:使用Kafka分离阅读和处理 怎么跑 技术栈 Scala2.13 sbt 1.4.7 Java 11 码头工人撰写 1-以...

    用java如何把图片处理到指定大小

    用java如何把图片处理到指定大小 切割程序如下: public void cut(String srcImageFile,FileOutputStream fileout, int w, int h, int x1, int y1, int sw, int sh) { // TODO Auto-generated method stub try ...

    Java 2实用教程(第三版)实验指导与习题解答

    实验1 读取服务器端文件 57 实验2 使用套接字读取服务器端对象 59 实验3 基于UDP的图像传输 62 上机实践11 数据结构 66 实验1 扫雷小游戏 66 实验2 排序与查找 70 实验3 使用TreeSet排序 72 上机实践12 java Swing ...

    Java程序设计复习题.docx.docx

    Java程序设计复习题 Java程序设计复习题全文共19页,当前为第1页。Java程序设计复习题全文共19页,当前为第1页。一、选择题: Java程序设计复习题全文共19页,当前为第1页。 Java程序设计复习题全文共19页,当前为第...

    最新JAVA编程题全集_50题及答案

    // I:1 // ':1 // m:3 // 空格:3 // g:2// ... String str = "I'm go to swimming"; Set<String> set = new HashSet(); for(int i=0;i();i++){ String s = str.substring(i,i+1); set.add(s); } ...

    超级有影响力霸气的Java面试题大全文档

    超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...

    freemarker语法完整版

    Freemarker页面语法 ... 类似于java里的import,它导入文件,然后就可以在当前文件里使用被导入文件里的宏组件 用例 假设mylib.ftl 里定义了宏copyright 那么我们在其他模板页面里可以这样使用 Freemarker代码 ...

    网管教程 从入门到精通软件篇.txt

    Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字) A3L:Authorware 3.x库文件 A4L:Authorware 4.x库文件 A5L:Authorware 5.x库文件 A3M,A4M:Authorware Macintosh...

    SVN出错无法Clean up,无法update

    当svn出现无法cleanup,无法update的时候, 大部分时候我们都只能删除项目,重新获取。 但是涉及到有些工程几十个G,所以很耽误时间。 本工具解决大部分无法cleanup无法update问题。

Global site tag (gtag.js) - Google Analytics