Java读取文件 利用MappedByteBuffer进行缓冲

Java读取文件 利用MappedByteBuffer进行缓冲,这样可以保证边读取大文件,边进行处理

package sean;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.util.Scanner;

public class Snippet {
	public void readResource() {
		long fileLength = 0;
		final int BUFFER_SIZE = 0x300000;// 3M的缓冲

		//for (String fileDirectory : this.readResourceDirectory())// 得到文件存放路径,我这里使用了一个方法从XML文件中读出文件的
		// 存放路径,当然也可以用绝对路径来代替这里的fileDriectory
		//{
			File file = new File("D:\\MyData.txt");
			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[i] = inputBuffer.get(offset + i);
					} else {
						for (int i = 0; i < fileLength - offset; i++)
							dst[i] = inputBuffer.get(offset + i);
					}
					// 将得到的3M内容给Scanner,这里的XXX是指Scanner解析的分隔符
					Scanner scan = new Scanner(new ByteArrayInputStream(dst))
							.useDelimiter(" ");
					while (scan.hasNext()) {
						// 这里为对读取文本解析的方法
						System.out.print(scan.next() + " ");
					}
					scan.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		//}
	}
	public static void main(String[] args)
	{
		Snippet sp = new Snippet();
		sp.readResource();
	}
}
时间: 2024-10-19 05:02:52

Java读取文件 利用MappedByteBuffer进行缓冲的相关文章

Java读取文件的注意点

关于Java读取UTF-8和UTF-8 BOM文件的问题记录在此,仅给自己提个醒. 今天从文本文件中读取数据存储到数据库中,操作完之后检验数据库发现有一些记录出现差错,几经排查(╮(╯Д╰)╭,自己忘了把异常输出,费了不少时间.),发现都是每个文本文件下的第一行出现差错,终于找到原因了,是文件的编码惹的祸.存储数据的文本文件编码类型为UTF-8 BOM,文件编码类型该了一下,再一检验,问题解决. 处理方法可以参考http://www.2cto.com/kf/201108/98509.html J

Java读取文件夹大小的6种方法及代码

这篇文章介绍了JAVA读取文件夹大小的几种方法实例,有需要的朋友可以参考一下. (一)单线程递归方式 package com.taobao.test; import java.io.File; public class TotalFileSizeSequential { public static String fileName = "C:\\Documents and Settings\\Administrator\\桌面\\monkeytalk"; // 递归方式 计算文件的大小

[Java]读取文件方法大全(转)

[Java]读取文件方法大全 1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile {    /**     * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件.     */    public static void readFileByBytes(String fileName) {        File file = new File(fileName);        Input

【转】Java读取文件方法大全

本文转自:http://www.cnblogs.com/lovebread/archive/2009/11/23/1609122.html#undefined 目录: 按字节读取文件内容 按字符读取文件内容 按行读取文件内容 随机读取文件内容 将内容追加到文件尾部 public class ReadFromFile { /** * 以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件. */ public static void readFileByBytes(String fil

Java读取文件,将字符串转化成日期类型,将日期类型进行加减

最近总用Java读取文件,发现了一种我个人觉得比较好的方法,现在分享给大家 public static void main(String[] args) throws Exception { FileInputStream f = new FileInputStream("文件路径"); InputStreamReader fileInputStream = new InputStreamReader(f); BufferedReader br = new BufferedReader

java读取文件最后N行

原文:java读取文件最后N行 源代码下载地址:http://www.zuidaima.com/share/1550463669226496.htm 指定行数,可以获取到从这行到文件尾的所有行,分享自大熊. 源文件: 读取最后10行结果 import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; import java.util.List

Java读取文件的问题

java读取文件的两种方法:java.io和java.lang.ClassLoader (我就知道这两种.....) // java.io: File file = new File("..."); FileInputStream fis = new FileInputStream("..."); FileReader fr = new FileReader("..."); //ClassLoader: ClassLoader loader =

Java读取文件-BufferedReader/FileReader/InputStreamReader/FileInputStream的关系和区别

一.Java读取和存储文件数据流 Java读取文件,实际是将文件中的字节流转换成字符流输出到屏幕的过程 这里面涉及到两个类:InputStreamReader和OutputStreamWriter InputStreamReader:将字节流转换成字符流 OutputStreamWriter:将字符流转换成字节流 InputStreamReader继承Reader类 OutputStreamWriter继承Writer类 二.BufferedReader/FileReader/InputStre

Java读取文件的几种方式

package com.mesopotamia.test; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.RandomAccessFile; impor