`
zcwfeng
  • 浏览: 106514 次
  • 性别: 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 IO,NIO具有更高的性能和更丰富的功能,尤其适合处理大文件或高并发场景。 #### 二、Java NIO关键组件 Java NIO的核心组件包括: - **Channels**:用于表示IO源或目标的一个连接点。 - **Buffers*...

    java多线程读取文件

    Java多线程读大文件 java多线程写文件:多线程往队列中写入数据

    java 分割文件 将大文件分割成小文件

    在Java编程语言中,分割大文件是一项常见的任务,特别是在处理大量数据或需要分批传输大文件的场景下。本文将详细介绍如何使用Java将一个大文件按照特定条件(如文件大小或生成日期)分割成多个小文件。 首先,我们...

    Java大文件上传(1GB,图片,视频,Flash文件,音频文件)

    Java作为一种广泛使用的服务器端编程语言,对于处理大文件上传提供了多种策略和技术。本篇文章将详细探讨Java实现大文件上传的原理、方法及优化策略。 首先,我们需要理解HTTP协议在上传大文件时面临的挑战。标准的...

    Java实现外部排序(10M内存排序1G大文件)

    有文件大小为1G的一个文件,文件每行存储的为URL及其访问次数,例如/api/auth/login 2 ,计算出访问次数最多的前5个URL和其访问次数,每行的URL可能重复,计算内存限制10M。 === 内含解题思路、测试结果截图、可运行...

    java使用多线程读取超大文件

    在读取超大文件时,使用单线程读取会出现读取速度慢的问题,尤其是在读取超过10G的文件时。这是因为单线程读取需要逐行读取文件,导致读取速度慢。为解决这个问题,可以使用多线程技术来读取超大文件。 多线程读取...

    java 支持 超大上G , 多附件上传

    `java 支持 超大上G , 多附件上传` 这个标题所指的就是Java平台如何处理大容量文件及批量附件的上传功能。在给定的描述中提到了`commons-fileupload-1.2.2`,这是一个非常实用的开源组件,用于处理HTTP协议中的文件...

    Java 大文件读取排序

    在Java编程中,处理大文件是一项挑战,特别是当涉及到读取、排序以及处理大量数据时。这个主题,"Java 大文件读取排序",主要关注如何高效地操作那些超出内存容量的大文件,同时保持程序的性能和稳定性。在本文中,...

    java读写文件避免中文乱码.docx

    Java 语言在读写文件时,经常会 gặp到中文乱码的问题。这是因为 Java 默认使用的字符编码是 ISO-8859-1,而中文字符在这个编码中无法正确地表示。为了避免中文乱码,需要使用正确的编码方式来读取和写入文件。 ...

    Java处理100万行超大Excel文件秒级响应

    EasyExcel是一个基于Java的简单、易用且高效的Excel处理工具,它支持读写Excel文件,并且能够有效地避免内存溢出问题。 **EasyExcel特点:** - **内存消耗低:** EasyExcel使用流式处理的方式读取Excel文件,只在...

    java 大文件(视频)分片上传+压缩

    本话题主要关注如何使用Java实现大视频文件的分片上传以及后续的压缩处理。我们将深入探讨前端的分片技术、后端的文件合并以及利用FFmpeg进行视频压缩。 首先,前端使用WebUploader进行大文件分片上传。WebUploader...

    java读取firebird数据库例子+jar包

    在实际使用Java读取Firebird数据库时,你需要按照以下步骤操作: 1. **添加依赖**:将这三个jar包添加到项目的类路径中,或者在Maven或Gradle等构建工具中配置依赖。 2. **注册驱动**:在Java代码中,使用`Class....

    Java获取文件夹大小、文件大小,文件个数[文].pdf

    Java 获取文件夹大小、文件大小和文件个数 Java 是一种流行的编程语言,广泛应用于软件开发领域。在文件操作方面,Java 提供了多种方法来获取文件夹大小、文件大小和文件个数。下面将对 Java 获取文件夹大小、文件...

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

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

    Java高效读取大文件实例分析

    例如,读取一个大约 1G 的文件: ```java @Test public void givenUsingGuava_whenIteratingAFile_thenWorks() throws IOException { String path = ... Files.readLines(new File(path), Charsets.UTF_8); } ```...

    java 读取串口数据(绝对可使用)

    Java 读取串口数据是Java编程中一个重要的部分,特别是在物联网(IoT)设备通信、嵌入式系统以及工业自动化等领域。RXTX库是一个流行的开源Java库,用于实现与串行端口(COM口)和并行端口的交互。在本教程中,我们将...

    webupload Java版轻松上传4个G文件

    在Java Web开发中,大文件上传是一个常见的需求,但处理大文件时往往面临内存限制、性能瓶颈以及用户体验等问题。WebUpload是一个优秀的文件上传组件,它提供了便捷的方式来处理大文件上传,尤其是在Java EE环境中。...

    文件及文件及的复制java代码

    - **文件读取**:使用`FileInputStream`和`BufferedInputStream`进行文件读取。 - **文件写入**:使用`FileOutputStream`和`BufferedOutputStream`进行文件写入。 - **异常处理**:捕获并打印异常信息。 #### 三、...

    14-Java操作Linux命令分割合并文本文件1

    标题中的“14-Java操作Linux命令分割合并文本文件1”指的是使用Java编程语言来执行Linux命令,以实现对文本文件的分割和合并操作。在处理大文件时,由于内存限制,不能一次性将整个文件读入,因此需要采用分块处理的...

    通过 Java 获取音频的波形图

    在Java中,`java.io`包提供了对文件的基本操作,如读取和写入,而`java.nio`包提供了更高级的非阻塞I/O功能,可能用于高效地处理音频文件。 8. **性能优化**:由于波形图可能包含大量的数据点,实时渲染可能会消耗...

Global site tag (gtag.js) - Google Analytics