Java 读取大文件方法
2023-03-09 21:57:56 时间
需求:实际开发中读取文本文件的需求还是很多,如读取两个系统之间FTP发送文件,读取后保存到数据库中或日志文件的数据库中保存等。
为了测试首先利用数据库SQL生成大数据文件。
规则是 编号|姓名|手机号,如 10|张10|13900000010
利用下面语句可以生成10,000,000条数据。
SELECT LEVEL||'|'||'张'||LEVEL||'|'||(13900000000+LEVEL) FROM DUAL CONNECT BY LEVEL < 1000000;
实现如下:
- package com.test.common.util;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.IOException;
- import java.util.Scanner;
- import org.apache.commons.io.FileUtils;
- import org.apache.commons.io.LineIterator;
- public class HandleTextFile {
- // 使用commons-io.jar包的FileUtils的类进行读取
- public static void readTxtFileByFileUtils(String fileName) {
- File file = new File(fileName);
- try {
- LineIterator lineIterator = FileUtils.lineIterator(file, "UTF-8");
- while (lineIterator.hasNext()) {
- String line = lineIterator.nextLine();
- System.out.println(line);
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- // 使用Scanner进行读取
- public static void readTxtByScanner(String fileName) {
- FileInputStream fileInputStream = null;
- Scanner scanner = null;
- try {
- fileInputStream = new FileInputStream(fileName);
- scanner = new Scanner(fileInputStream, "UTF-8");
- while (scanner.hasNext()) {
- String line = scanner.nextLine();
- System.out.println(line);
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } finally {
- if (fileInputStream != null) {
- try {
- fileInputStream.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (scanner != null) {
- scanner.close();
- }
- }
- }
- // 使用cache进行读取
- public static void readTxtByStringBuffer(String fileName) throws IOException {
- File file = new File(fileName);
- BufferedReader reader = null;
- try {
- reader = new BufferedReader(new FileReader(file), 10 * 1024 * 1024);
- String stringMsg = null;
- while ((stringMsg = reader.readLine()) != null) {
- System.out.println(stringMsg);
- }
- reader.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- try {
- HandleTextFile.readTxtByStringBuffer("D:\\test\\customer_info.txt");
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
参考文件:读取大文件性能测试
相关文章
- 在Java SE平台上使用Headless模式
- Java的LINQ:Linq4j简明介绍
- .NET MVC Razor也可以这样玩!
- 我也谈谈.NET程序员工资低
- 想追赶.Net的脚步?Java面前障碍重重
- 十五个只有程序员会乐的事情
- Java并发编程:Volatile不能保证数据同步
- 从设计不足的JDBC,说到数据库链接池
- 编程没有银弹:探讨Java8新增特性的优缺点
- Java日志缓存机制的实现
- C++开发者都应该使用的10个C++11特性
- 如何构建安全的“记住我”的特性
- JavaOne大会推出众多升级旨在提升企业应用开发生产力
- Duke’s Choice Awards奖项首次在中国Java社区中选出
- 最受欢迎的8位Java大师
- JavaZone2013年度大片《Java末日》预告片
- JVM致命错误日志(hs_err_pid.log)解读
- 甲骨文Java补丁已发布 但大多数用户没有更新
- 我对Java内存模型的理解
- J2EE 7中Bean Validation1.1新特性介绍---表达式语言