`
xurichusheng
  • 浏览: 336080 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java 7 nio逐行读取文件内容

nio 
阅读更多

nio逐行读取文件内容,使用 java 7.

首先,获取文件编码;

其次,读取文件内容。

 

1. 获取文件编码

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class CommonsMethods {
	/**
	 * @Title: getFileCharset
	 * @Description: 判断文件的编码格式
	 * @param filePath
	 *            文件绝对路径
	 * @return String
	 * @author 
	 * @date 2015年12月26日
	 */
	public static String getFileCharset(String filePath) {

		File file = new File(filePath);

		if (!file.exists()) {
			System.out.println("File not found.");
		}
		// 默认编码格式为GBK
		String charset = "GBK";

		FileInputStream is = null;
		BufferedInputStream bis = null;

		try {
			byte[] first3Bytes = new byte[3];

			boolean checked = false;

			is = new FileInputStream(file);

			bis = new BufferedInputStream(is);

			bis.mark(0);

			int read = bis.read(first3Bytes, 0, 3);

			if (-1 == read) {
				charset = "GBK";
			} else if (first3Bytes[0] == (byte) 0xFF
					&& first3Bytes[1] == (byte) 0xFE) {
				charset = "UTF-16LE";
				checked = true;
			} else if (first3Bytes[0] == (byte) 0xFE
					&& first3Bytes[1] == (byte) 0xFF) {
				charset = "UTF-16BE";
				checked = true;
			} else if (first3Bytes[0] == (byte) 0xEF
					&& first3Bytes[1] == (byte) 0xBB
					&& first3Bytes[2] == (byte) 0xBF) {
				charset = "UTF-8";
				checked = true;
			}
			bis.reset();

			if (!checked) {

				int loc = 0;

				while ((read = bis.read()) != -1) {

					loc++;

					if (read >= 0xF0) {
						break;
					}

					if (0x80 <= read && read <= 0xBF) {
						// 单独出现BF以下的,也算GBK
						break;
					}

					if (0x80 <= read && read <= 0xDF) {
						read = bis.read();
						if (0x80 <= read && read <= 0xBF) {
							// GBK
							continue;
						} else {
							break;
						}
					} else if (0xE0 <= read && read <= 0xEF) {
						read = bis.read();
						if (0x80 <= read && read <= 0xBF) {
							read = bis.read();
							if (0x80 <= read && read <= 0xBF) {
								charset = "UTF-8";
								break;
							} else {
								break;
							}
						} else {
							break;
						}
					}
				}
			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			IOUtils.closeStream(bis, null);
			IOUtils.closeStream(is, null);
		}

		return charset;
	}
}

 

2. 逐行读取文件内容

import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class NioReadFile {

	public static void main(String[] args) {

		String fileName = "D:\\CIME\\measure.CIME";

		String charset = CommonsMethods.getFileCharset(fileName);

		System.out.println("charset=" + charset);

		try {
			List<String> lines = Files.readAllLines(Paths.get(fileName),
					Charset.forName(charset));

			for (String line : lines) {
				System.out.println(line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

 

3. IOUtils

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.nio.channels.Channel;

public class IOUtils {

	public static void closeStream(InputStream is, OutputStream out) {

		if (null != out) {
			try {
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			out = null;
		}

		if (null != is) {
			try {
				is.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			is = null;
		}
	}

	public static void closeReader(Reader reader) {

		if (null != reader) {
			try {
				reader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			reader = null;
		}
	}

	public static void closeWriter(Writer writer) {

		if (null != writer) {
			try {
				writer.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			writer = null;
		}
	}

	public static void closeChannel(Channel c) {

		if (null != c) {
			try {
				c.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			c = null;
		}
	}
}

 

 

分享到:
评论

相关推荐

    java nio 包读取超大数据文件

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

    Java用NIO读取文件示范

    简单的用Java的NIO读取文件的程序,给大家参考。

    JAVA NIO 按行读取大文件支持 GB级别-修正版

    然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 这样字节的判断,然后 返回行 如果 到达 fbb的结尾 还没有结束,就再通过nio读取一段字节,继续处理。 由于对于本程序 116个字节以上的行才有意义...

    JAVA NIO 按行读取大文件,支持 GB级别

    然后对fbb自己中的内容进行行判断即 10 回车 13 行号 0 文件结束 这样字节的判断,然后 返回行 如果 到达 fbb的结尾 还没有结束,就再通过nio读取一段字节,继续处理。 由于对于本程序 116个字节以上的行...

    Pro Java 7 NIO2

    java nio2, Pro Java 7 NIO2

    java基于NIO实现Reactor模型源码.zip

    java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现...

    java nio 读文件

    java nio 读文件,java nio 读文件

    java多线程读取文件

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

    JAVA NIO 简单PFT 文件服务

    JAVA NIO 简单PFT 文件服务 上传 下载 列表

    java NIO和java并发编程的书籍

    java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...

    Java NIO 中英文版 + Pro Java 7 NIO.2

    Java NIO,Ron Hitchens 著,中文版 裴小星 译,Pro Java 7 NIO.2,Anghel Leonard 著,pdf文字版带书签,无安全限制

    ProJava7NIO.2PDFBooks.pdf 英文原版

    Pro Java 7 NIO.2 – PDF Books

    java nio 写文件

    java nio 写文件,java nio 写文件

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...

    java nio 实现socket

    java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket

    Java IO NIO and NIO 2 无水印pdf

    Java IO NIO and NIO 2 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn...

    Java NIO 中文 Java NIO 中文 Java NIO 中文文档

    Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...

    nio.rar_FastCopyFile.java_NIO_UseFloatBuffer.java_java nio_文件锁

    Java NIO 源码适合初学者,里面包括通道和Buffer的基本适用,以及文件锁,和内存文件映射等等

    java NIO 写文件

    java nio 写文件样例,java写大数据文件时提高性能

    NIO处理大文件

    NIO 处理大文件

Global site tag (gtag.js) - Google Analytics