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