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