遇到过这样一个情况,需要用java读取一个200M的文本格式文件,而且还需要对文件的内容做解析,进行分词。如果用JVM的默认设置,利用Scanner类只能读出4M大小内容,于是我就在网上搜索,但是网上没有找到一篇文章是我所需要的内容。于是我只好翻thinking in java,发现了一个java的nio里有个MappedByteBuffer类,他的作用可以把一个文件映射到内存中,然后就能像访问数组一样去读取这个文件。于是我在JDK中查了MappedByteBuffer的详细的用法,然后将其和Scanner类结合一下,便能得到一边读取大文件,一边解析读取的内容了功能了,具体的代码如下:
public void readResource() {
long fileLength = 0;
final int BUFFER_SIZE = 0x300000;// 3M的缓冲
for(String fileDirectory:this.readResourceDirectory())//得到文件存放路径,我这里使用了一个方法从XML文件中读出文件的
//存放路径,当然也可以用绝对路径来代替这里的fileDriectory
{
File file = new File(fileDirectory);
fileLength = file.length();
try {
MappedByteBuffer inputBuffer =
new RandomAccessFile(file,"r").getChannel().map(FileChannel.MapMode.READ_ONLY, 0, fileLength);//读取大文件
byte[] dst = new byte[BUFFER_SIZE];//每次读出3M的内容
for(int offset=0; offset < fileLength; offset+= BUFFER_SIZE)
{
if(fileLength - offset >= BUFFER_SIZE)
{
for(int i = 0;i < BUFFER_SIZE;i++)
dst
= inputBuffer.get(offset + i);
}
else
{
for(int i = 0;i < fileLength - offset;i++)
dst = inputBuffer.get(offset + i);
}
//将得到的3M内容给Scanner,这里的XXX是指Scanner解析的分隔符
Scanner scan = new Scanner(new ByteArrayInputStream(dst)).useDelimiter("XXX");
while(scan.hasNext())
{
//这里为对读取文本解析的方法
}
scan.close();
}
} catch (Exception e)
{
e.printStackTrace();
}
}
}
希望以上这段代码能对当时和我遇到同样问题的人能有所帮助。
近日由于相关业务,需要读取一个将近1G的文件,然后将符合条件的数据insert进数据库。而执行完程序之后,最后写入数据库的数据是将近100w条,在linux系统下运行时间将近3个小时,操作量还是上了一个相当的规模。
由于之前没有进行过超大文件的读写,一开始以为需要使用分布式系统等复杂的操作才能进行。后来google了一下,发现jdk本身就支持超大文件的读写,真是虚惊一场。
网上的文章基本分为两大类,一类是使用BufferedReader类读写超大文件;另一类是使用RandomAccessFile类读取,经过比较,最后使用了前一种方式进行超大文件的读取,下面是相关代码,其实很简单
File file = new File(filepath);
BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file));
BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),5*1024*1024);// 用5M的缓冲读取文本文件
String line = "";
while((line = reader.readLine()) != null){
//TODO: write your business
}
注意代码,在实例化BufferedReader时,增加一个分配缓存的参数即可
摘自 千山独行
分享到:
相关推荐
- 分析堆转储文件(heap dump),找出占用内存较大的对象集合。 **注意事项:** - 调整JVM参数时需谨慎,过大的堆可能会导致其他问题,如GC停顿时间增加。 - 应用程序设计时应考虑到资源的有效利用,避免无谓的内存...
在 Linux 下,可以在 `catalina.sh` 文件中添加 `export JAVA_OPTS="-server -Xms512m -Xmx1024m"`,以设置 JVM 的堆大小。 优化程序 1. 避免死循环:检查程序中是否存在死循环,并进行优化。 2. 手动回收垃圾:...
java虚拟机OutOfMemoryError:Java heap space堆dump文件,可以直接用来分析。
- 解压后会得到两个文件:一个是可执行文件(名为`jad.exe`,适用于Windows系统;或名为`jad`,适用于*nix系统),另一个是此README文件。无需进行额外设置即可使用。 2. **基本使用**: - 使用命令行界面调用Jad...
在Java编程语言中,将二进制文件转换为文本文档通常涉及到字符编码的理解和处理。二进制文件可以包含任何类型的数据,如图像、音频、...通过分析和运行这些文件,你可以更好地理解如何在Java中实现二进制到文本的转换。
`jca`(Java Core Analyzer)是专门用于分析`javacore`文件的工具,它可以提供更直观和详细的分析报告,帮助开发者定位问题原因。 而`heapdump`文件则是JVM在运行过程中,通过Java的`jmap`命令或者`VisualVM`等工具...
1. Limited functionality:Java 文件扫描程序只能统计文件中的行数、注释行数和空白行数,无法进行更加复杂的代码分析。 2. Limited scalability:Java 文件扫描程序可能无法处理非常大的项目,需要优化和改进以...
XSD文件转Java工具能够基于XSD文件生成对应的Java类,这些类包含了与XSD定义的元素和属性相对应的字段和方法。 转换过程通常包括以下步骤: 1. **解析XSD文件**:工具首先读取XSD文件,分析其元素、属性、类型定义...
2. 灵活:Java 读取 Excel 文件可以对数据进行灵活的处理和分析。 3. 可靠:Java 读取 Excel 文件可以确保数据的安全和可靠。 Java 读取 Excel 文件的困难点 1. Excel 文件格式:Excel 文件格式的变化可能会导致...
1. 加载DWG文件:使用SuperMap iObjects Java提供的类加载DWG文件。 2. 解析DWG数据:解析文件,提取所需的地理信息。 3. 将数据转换为JSON:将解析到的数据结构化为JSON对象。 4. 输出JSON:将JSON对象写入文件或...
在Java编程中,处理Excel文件是一项常见的任务,特别是在数据分析、报表生成或数据导入导出等场景下。然而,当处理的Excel文件特别是XLSL格式的文件数据量巨大时,传统的API,如Apache POI或者JExcelAPI,可能会遇到...
**标题与描述解析** 标题"smali2java——直接将smali转换成java"揭示了本文的核心主题,即一个名为"smali2...尽管在压缩包中的"Smali2Java"可能是工具的可执行文件,实际使用时还需要结合相关文档或说明来正确操作。
### Java处理100万行超大Excel文件秒级响应 #### 一、问题背景与需求分析 在项目开发过程中,经常会遇到需要处理大量Excel数据的情况。这些数据可能包括成千上万条记录,每条记录又包含多个字段。传统的处理方式...
在Java编程环境中,进行音频文件的频谱分析是一项复杂但重要的任务,特别是在音频处理和音乐信息检索领域。本文将深入探讨如何使用给定的压缩包文件来实现这一目标。 首先,频谱分析是将时域信号转换为频域表示的...
Java课程设计中的“敏感词汇分析程序”是一个旨在培养学生掌握Java编程技术、图形用户界面(GUI)设计、文件处理和异常处理的应用项目。以下是该设计的主要知识点: 1. **图形用户界面**: - Java中的GUI库通常使用...
java 线程Dump 分析工具: Java的TDA线程转储分析器是一个用于分析Sun Java VM生成的线程转储和堆信息的小型Swing GUI(目前用1.4测试)。它从提供的日志文件中解析线程转储和类直方图。它提供关于发现的线程转储的...
【Java文件分析器1】是针对Java编程语言的文件解析工具,主要目的是处理和分析Java源代码文件,以获取相关信息,如类结构、方法、变量等。在软件开发过程中,这样的工具能帮助开发者理解代码逻辑,进行代码审查,...
Java语言在语音识别领域提供了丰富的库和工具,使得开发者能够轻松地实现语音转文字功能。在你的项目中,你可以利用这些资源来构建一个高效的语音识别系统。以下是对"JAVA语音转文字"这一主题的详细解释。 1. **...
Java语言中实现将word文档转换为html格式的方法示例,结合实例形式分析了java针对doc与docx格式文件的相关转换操作技巧。 知识点1:Java中word文档的读取 在Java中,读取word文档可以使用Apache POI库,POI库提供...