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

如:

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读取1g超大图片_java读取大文件1G+ | 学步园相关推荐

  1. java读取pdf三维图片_java 读取PDF文件生成图片形式

    引入所需maven依赖 org.icepdf.os icepdf-core 6.2.2 javax.media jai_core JAVA代码工具类package com.util; import c ...

  2. java运行速度慢的原因_java运行速度慢的原因 | 学步园

    1)java是解释性语言,java程序在运行时类加载器从类路经中加载相关的类,然后java虚拟机读取该类文件的字节,执行相应操作.而C++编译的时候将程序编译成本地机器码.一般来说java程序执行速度 ...

  3. java中间常用的类_Java实现的中间库 | 学步园

    数据库与数据库之间的数据交互 1. 背景 中间库主要用于解决一个大系统多个数据库,其中多个数据库作用是:用于备份数据或者用于存储业务数据等:中间库还可以用于解决两个系统间的接口问题,2个系统共同操作这 ...

  4. java oracle 图片_JAVA读取Oracle中的blob图片字段并显示

    JAVA读取Oracle中的blob图片字段并显示 近期,在给客户做一个Demo页面时,需要用JAVA读取Oracle中的blob图片字段并显示,在此过程中,遇到一些问题,例如:连接Oracle数据库 ...

  5. java主界面设置背景图片_java 窗体设置背景图片问题?(附上登陆界面代码,我想加个背景图片,求大神帮忙改改)...

    java 窗体设置背景图片问题?(附上登陆界面代码,我想加个背景图片,求大神帮忙改改) 关注:223  答案:4  mip版 解决时间 2021-01-26 22:09 提问者非莪莫属 2021-01 ...

  6. java下mysql连接配置文件_Java读取.properties配置文件并连接数据库

    1.读取配置文件 //Properties集合 流对象读取键值对 public static void getNum() throws Exception { Properties p=new Pro ...

  7. php读取文件和读取redis,PHP结合redis实现大文件去重

    本篇文章主要内容是用PHP多个进程配合redis的有序集合实现大文件去重,感兴趣的朋友可以学习一下. 1.对一个大文件比如我的文件为 -rw-r--r-- 1 ubuntu ubuntu 9.1G M ...

  8. java实现对大文件切割下载_Java实现大文件的切割与合并操作示例

    Java实现大文件的切割与合并操作示例 发布时间:2020-09-27 02:25:08 来源:脚本之家 阅读:99 作者:HiBoyljw 本文实例讲述了Java实现大文件的切割与合并操作.分享给大 ...

  9. java用mysql存储图片_Java存储图片到Mysql

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 [1]视图层 action="${ctx}/web/UserInforServlet?method=userInforServlet" ...

最新文章

  1. Linux下PS1设置
  2. ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
  3. ·记2014.5.16的一件小事
  4. POI异步导入Excel兼容xsl和xlsx
  5. 九度OnlineJudge之1004:Median
  6. app vue 真机运行_uni-app黑魔法:小程序自定义组件运行到H5平台
  7. 数据结构基础(17) --二叉查找树的设计与实现
  8. Python天气查询系统(连接数据库版)
  9. 网页可以播放RTMP视频流?支持RTMP的网页播放器
  10. 注意!黑客可以通过CSS3功能攻击浏览器
  11. 不一样的90后创业者:创业是另一种生活方式
  12. Flink sql 写ddl连接kafka
  13. [ XJTUSE ]JAVA语言基础知识——7.11 JTree、TreeModel实现树
  14. Box Cox Transformation
  15. 奇数位升序偶数位降序链表排序
  16. 【软考总结】不负韶光--I eat konwledge like air.
  17. 2021-4-19单片机原理及应用作业
  18. 网络io和磁盘io_在磁盘IO上,第1部分:IO的风味
  19. web前端开发论文写作_现在入行 web前端开发 晚了?不看数据你根本不知道这些...
  20. iview button根据条件 disabled可用或者不可用

热门文章

  1. 统计学习之——随机变数与概率分布
  2. javaweb服务器运行打印机制log4j的说明[在终端动态显示文件内容tailf]
  3. 初次使用http打不开页面,使用https打开过后使用http协议又能正常访问
  4. 程序员 30 岁的不惑之年
  5. Spark GraphX Pregel 应用
  6. 整数因子分解问题(多种方法)
  7. Windows系统安装Qt保姆级教程
  8. VMware安装windows 7系统
  9. python的open函数使用
  10. Appimage无法打开的bug