java处理超大文件(40G)

需求:
现在有个40G的文件,文件内容格式:
111---222
111---222

结果:111(一个字段)
222(一个字段)
导入到数据库中
请问这种需求应该怎么处理比较合适?

40G的文件数据直接存数据库?
这么大的文件可以用分片读取,然后批量插入数据库。

使用BufferedReader读取,使用数据库事务来进行插入。
数据库不知道你使用的是什么接口,我就省略了。

String encoding = "UTF-8";
BufferedReader reader = null;
try {
    // 开始数据库事务
    // ......
    reader = new BufferedReader(new InputStreamReader(new FileInputStream("/bigfile.txt"), encoding));
    int count = 0;
    for (String line; (line = reader.readLine()) != null;) {
        // 解析行数据,插入到数据库
    }
} finally {
    close(reader);
    // 结束数据库事务
    // ......
}

根据字符集导入 尽量不要使用第三方显式数据库管理软件使用

想当年被问过这个问题 40G单纯插入 都弄死了 面试官最后说的用用数据库自带的load

可以参考如下链接:
30G的大文件,如何快速全部导入到数据库 https://www.ahfesco.com.cn/affairs/article.asp?id=3534

RandomAccessFile
使用JDK的这个类,不会一次性加载整个大文件,一行一行读取,
读一部分,写一部分,
可以全部读完。

可以使用hadoop来操作,磁盘空间足够就可以

先把文件进行切割成小文件,
然后在多线程文件读取
采用批量插入数据库

Java按行读取大文件
通常读取一个文件都是直接把这个文件转化为流的形式,但是对于一个容量为几个G的文件,这很显然是不明智的做法,当前我需要将几个G的文件读取,然后插入到数据库,使用的是一个commons的jar包,尝试了一下,真的很不错。

pom.xml

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>

demo.java

@Test
    void insert() throws Exception {
        LineIterator it = FileUtils.lineIterator(new File("E:\\1\\jingyou.json"));
        try {
            while (it.hasNext()) {
                String line = it.nextLine();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            LineIterator.closeQuietly(it);
        }

    }