JAVA-分割大文件(按行分割)

package com.testSplitByNumber;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;

import com.csvreader.CsvReader;

public class SplitFile {
    public static void main(String args[]){
        String path = "F:/zh.csv";
        String folder = path.substring(0, path.lastIndexOf("."));
        File file = new File(path);
        File file2 = new File(folder);
        Map<String,BufferedWriter> map = new HashMap<String, BufferedWriter>();
        if(! file.exists()){
            System.out.println("文件不存在!");
        }else {
            if(! file2.exists() || !file2.isDirectory()){
                file2.mkdir();
            }
            long start = System.currentTimeMillis();
            CsvReader reader = null ;
            BufferedWriter bw = null;
            try {
                reader = new CsvReader(path, ‘,‘, Charset.forName("utf-8"));
                reader.readHeaders();
                int count = 0;
                while(reader.readRecord()){
                    count ++;
                    String strs[] = reader.getValues();
                    String line = strs[strs.length - 1];
                    String fileName = folder + File.separator + file.getName().subSequence(0, file.getName().lastIndexOf("."))+ line.charAt(line.length() - 1)+".csv";
                    bw = map.get(fileName);
                    if(bw == null){
                        bw = new BufferedWriter(new FileWriter(new File(fileName)));
                    }
                    map.put(fileName, bw);
                    bw.write(writeLine(strs)+"\r\n");
                    if(count % 100000 == 0){
                        bw.flush();
                        System.out.println("已经处理:" + count + "条");
                    }
                }
                long end = System.currentTimeMillis();
                System.out.println("共用时:" + (end - start)/1000 + "s");
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                if(reader != null){
                    reader.close();
                    reader = null;
                }
                for(BufferedWriter bww : map.values()){
                    try {
                        bww.flush();
                        bww.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    public static String writeLine(String strs[]){
        StringBuffer sb = new StringBuffer("");
        for(int i = 0;i < strs.length;i++){
            strs[i] = strs[i].replaceAll(",", ",");
            strs[i] = strs[i].replaceAll("\\s*", "");
            sb.append(strs[i] + ",");
        }
        return sb.substring(0, sb.length() - 1).toString();
    }
}
时间: 2024-10-05 17:15:29

JAVA-分割大文件(按行分割)的相关文章

大文件不断行分割

#! /usr/bin/python #! -*- coding:utf-8 -*- import os def SplitFile(cnt): path='e:\data' filename=path+'\\qunti_deal.txt' os.chdir(path) i=0 n=0 size=os.path.getsize(filename)/1024/cnt print size temp = open(filename+'.part'+str(i),'w') f=open(filenam

Linux培训教程 linux系统下分割大文件的方法

在linux中分割大文件,比如一个5gb日志文件,需要把它分成多个小文件,分割后以利于普通的文本编辑器读取. 有时,需要传输20gb的大文件,Linux培训 教程件到另一台服务器,也需要把它分割成多个文件,这样便于传输数据. 以下通过五个不同的例子,来讲解Linux下分割大文件的方法,供大家参考. 例1.以每个文件1000行分割 split命令分割文件成每个文件1000行,并且文件名依次为 [前缀]aa,[前缀]ab, [前缀]ac等,默认的前缀是X,每个文件的行数为1000行. 命令: 复制代

linux下利用split分割大文件

使用split分割大文件 在我们的实际生产环境中,会产生许许多多的大文件,这些文件的大小不一,有的甚至会有好几十T的大小,那么我们对这些文件进行分析时,又该如何下手呢?这时我们便可以使用linux下自带的一个命令split来实现文件的分割. Split对文件的分割支持按照行数的分割,以及支持按照大小分割两种模式.要说明的是,在二进制文件中,没有'行'的概念,所以二进制文件无法使用行分割,而只能按照文件的大小来进行分割. 本次实验自行分割出一个500M大小的文件,如下图: 我们来对这个模拟文件进行

cmd - 分割大文件

场景 线上出了问题,我需要去查找log来定位问题,但是由于线上数据量庞大,这些log文件每过一个小时就会自动回滚一次,尽管如此,有的log文件依然达到了五六g以上的大小. 对于这种巨大的log文件,常用的一些文本编辑器诸如EditPlus.Notepad++就不用说了,打开几百m的文件都会很卡,上g的直接程序崩溃.虽然UltraEdit对于大文件的读取会友好一些,但打开这种五六g的文件时也会陷入长时间的无响应状态. 后来我又得知了一个看log神器--glogg,打开五六g的大文件速度很快,但是有

Java 实现大文件切割并生成多个文件

话不多说,直接上代码 import java.io.*; /*** * 分割大文件 * ( * SQL 文件太大(insert),第三方工具无法一次性读取,进行分割 * 生成 一个一个文件 * ) */ public class SplitFileUtil { // 使用示例 public static void main(String[] args) { // 目标文件 String targetFile = "F:\\logs\\insert11.sql"; // 存放的目录 St

java filechannel大文件的读写

java读取大文件 超大文件的几种方法 转自:http://wgslucky.blog.163.com/blog/static/97562532201332324639689/ java 读取一个巨大的文本文件既能保证内存不溢出又能保证性能 2010-09-25 11:18:50|  分类: 默认分类 |字号 订阅 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.

【原创】用JAVA实现大文件上传及显示进度信息

用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 一. 大文件上传基础描述: 各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负责对Http MultiPart协议内容进行解析,并供开发人员调用请求的表单内容. 比如: Spring 框架中使用类似CommonsMultipartFile对象处理表二进制文件信息. 而.NET 中使用HtmlInputFile/ HttpPostedFile对象处理二进制文件信息. 优点:使用框架内置对象可以很方便的

java读取 500M 以上文件,java读取大文件

java 读取txt,java读取大文件 设置缓存大小BUFFER_SIZE ,Config.tempdatafile是文件地址 来源博客http://yijianfengvip.blog.163.com/blog/static/175273432201191354043148/ package com.yjf.util;import java.io.File;import java.io.RandomAccessFile;import java.nio.MappedByteBuffer;imp

查看大文件的行数(windows 和 Ubuntu)

Windows 在Windows平台上,我们可以使用很多工具来打开文件,查看其行数,最常用的就是MS Office Word.记事本等.在MS-DOS下,我们还可以使用edit模式来打开文件,但其最多能打开65280行数据.这里推荐一个工具notepad++,这个工具能打开并显示更多行的数据,并且自动显示行号. Ubuntu 在Ubuntu平台上,我们可以使用 wc 命令在不打开文件的情况下,来统计文件的信息. 比如: wc -l myfile.txt 统计文件的行数 wc -m myfile.

大文件按行分离脚本

1 #!/bin/bash 2 #大文件按行数分离成若干小文件脚本 3 4 con_data='db2 connect to db_edp' 5 con_time='db2 "values current timestamp"' 6 con_reset='db2 connect reset' 7 #将要分离的文件名写到此处,其它地方不要改动 8 clear_file=pdm_20160512.txt 9 10 echo $con_data > lianjie.txt 11 ech