Java 读取大文件方法

需求:实际开发中读取文本文件的需求还是很多,如读取两个系统之间FTP发送文件,读取后保存到数据库中或日志文件的数据库中保存等。

为了测试首先利用数据库SQL生成大数据文件。

规则是 编号|姓名|手机号,如 10|张10|13900000010

利用下面语句可以生成1,000,000条数据。生成的数据保存到 D:\test\customer_info.txt 文件里面。

SELECT LEVEL||'|'||''||LEVEL||'|'||(13900000000+LEVEL)  FROM DUAL CONNECT BY LEVEL < 1000000;

利用Java程序读取刚生成的文件。 

实现如下:

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();
        }
    }
}

 参考文件:读取大文件性能测试

原文地址:https://www.cnblogs.com/seabird1979/p/4863821.html