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

 參考文件:讀取大文件性能測試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM