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

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

  • 相关阅读:
    开发者论坛一周精粹(第九期)
    你刚吃的兰州牛肉面_背后就藏着大数据
    《C++覆辙录》——1.9:使用糟糕的语言
    老司机带你用MaxCompute和表格存储玩转车联网数据
    Gartner最新发布:2017年十大战略技术趋势
    js的事件的三个阶段,事件委托的原理
    Spring的AOP1
    了解SQL注入攻击
    了解XSS攻击
    了解Serialization
  • 原文地址:https://www.cnblogs.com/seabird1979/p/4863821.html
Copyright © 2011-2022 走看看