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

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

  • 相关阅读:
    问题 F: A+B和C (15)
    问题 E: Shortest Distance (20)
    完数
    分解质因数
    念整数
    问题 B: 习题7-7 复制字符串中的元音字母
    问题 A: 习题7-5 字符串逆序存放
    问题 D: 习题6-12 解密
    计算机的重点编码方式
    PyCharm更换第三方包源
  • 原文地址:https://www.cnblogs.com/seabird1979/p/4863821.html
Copyright © 2011-2022 走看看