zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }

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

  • 相关阅读:
    jsp转向
    什么是 XDoclet?
    tomcat中的几点配置说明
    mysql5问题
    POJ 3734 Blocks
    POJ 2409 Let it Bead
    HDU 1171 Big Event in HDU
    POJ 3046 Ant Counting
    HDU 2082 找单词
    POJ 1286 Necklace of Beads
  • 原文地址:https://www.cnblogs.com/seabird1979/p/4863821.html
Copyright © 2011-2022 走看看