zoukankan      html  css  js  c++  java
  • 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.ArrayList;
    import java.util.List;
    
    import com.csvreader.CsvReader;
    
    public class CombineFile {
        public static List<Integer> list = new ArrayList<Integer>();/*存放有序的分割文件标号*/
        public static List<File> list2 = new ArrayList<File>(); /*存放有序的分割文件*/
        public static String name = null;
        public static String path = "F:/zh";
        public static void main(String args[]){
            File file = new File(path);
            if(! file.exists() || !file.isDirectory()){
                System.out.println("文件夹错误!");
            }else{
                long start = System.currentTimeMillis();
                File files[] = file.listFiles();
                list = fileNum(files);
                fileOrder(list);
                fileName(list, list2);
                
                BufferedWriter bw = null;
                CsvReader reader = null;
                try {
                    bw = new BufferedWriter(new FileWriter(new File("F:/zzh03.csv")));
                    int num = 0;
                    /*对每一个文件进行处理*/
                    for(int i = 0;i < list2.size();i++){
                        File f = list2.get(i);
                        reader = new CsvReader(f.getPath(),',',Charset.forName("GBK"));
                        reader.setSafetySwitch(false);
                        while(reader.readRecord()){
                            num++;
                            String string[] = reader.getValues();
                            bw.write(writeLine(string)+"
    ");
                            if(num % 100000 == 0){
                                bw.flush();
                                System.out.println("合并文件" + num + "行");
                            }
                        }
                    }
                    long end = System.currentTimeMillis();
                    System.out.println("合并完成,共用时"+(end-start)/1000+"s");
                } catch (IOException e1) {
                    e1.printStackTrace();
                }finally{
                    if(reader != null){
                        reader.close();
                        reader = null;
                    }
                    try {
                        bw.flush();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        /**
         *对csv中的每一行处理 
         */
        public static String writeLine(String strs[]){
            StringBuffer sb = new StringBuffer("");
            for(int i = 0;i < strs.length;i++){
                sb.append(strs[i]+",");
            }
            return sb.substring(0, sb.length() - 1).toString();
        }
        
        /**截取文件标号并存入list*/
        public static List<Integer> fileNum(File files[]){
            for(int i = 0;i < files.length;i++){
                name = files[i].getName().substring(0, files[i].getName().lastIndexOf(".")-1);
                String  n = files[i].getName().substring(files[i].getName().length()-5, files[i].getName().length()-4);
                list.add(Integer.parseInt(n));    
            }
            return list;
        }
        
        /**对文件标号排序*/
        public static List<Integer> fileOrder(List<Integer> list){
            for(int i = 0;i < list.size()-1;i++){
                for(int j = 1;j < list.size() - i;j++){
                    int temp = 0;
                    if(list.get(j - 1) .compareTo(list.get(j))>0){
                        temp = list.get(j - 1);
                        list.set((j - 1),list.get(j ));
                        list.set(j , temp);        
                    }
                }
            }
            return list;
        }
        
        /**将list对应标号的对应文件放入list2*/
        public static List<File> fileName(List<Integer> list,List<File> list2){
            for(int i = 0;i < list.size();i++ ){
                File file2 = new File(path+"/"+name + list.get(i)+".csv");
                list2.add(file2);
            }
            return list2;
        }
    }
  • 相关阅读:
    MFC--响应鼠标和键盘操作
    c/C++二进制运算符
    MFC-简单的函数使用
    mfc学习之路--如何删除通过控件新增的变量
    标准BST二叉搜索树写法
    Spring4.1新特性——Spring MVC增强
    浅析JSONP-解决Ajax跨域访问问题
    关于jquery跨域请求方法
    解决jsp下载文件,迅雷下载路径不显示文件名称的问题
    REST风格URL
  • 原文地址:https://www.cnblogs.com/zqzdong/p/4840528.html
Copyright © 2011-2022 走看看