java实现对文件进行切割

一、创建相应的工具类

public class SplitFileUtil {    public static final String _encoding = "GB2312";    /**     *     * @param sourceFileUrl 源路径     * @param targetPath 目标路径     * @return     * @throws IOException     */    public static List separateFileByLine(String sourceFileUrl,String targetPath) throws IOException {        List filenames = new ArrayList<>();        int file_count;        //获取文件总行数        long lineNum = getFileLineNum(sourceFileUrl);        //不做分文件处理 Constants.line_num_per_file;自定义的常量        if(lineNum<= Constants.line_num_per_file){            filenames.add(sourceFileUrl);        }else{            //分割文件            if(lineNum%Constants.line_num_per_file==0){                file_count = (int)(lineNum/Constants.line_num_per_file);            }else{                file_count = (int)(lineNum/Constants.line_num_per_file+1);            }            Long[] countArray;            if(file_count>Constants.max_file_count){                file_count = Constants.max_file_count;                //将每个文件的起始索引记录下来                countArray  = new Long[file_count];                long file_start_index;                int line_num_per_file;                if(lineNum%file_count==0){                    line_num_per_file = (int)(lineNum/file_count);                }else{                    line_num_per_file = (int)(lineNum/file_count+1);                }                for(int i=0;i result = new ArrayList<>();                //读取掉第一行数据,第一行为标题                br.readLine();                // 读取一行                while ((rec = br.readLine()) != null) {                    count++;                    result.add(rec);                    if(count==countArray[_index]){                        //一次性写入文件                        String targetFile  = targetPath+"data_part_"+_index+".csv";                        writeCsv(targetFile,result);                        result.clear();                        _index++;                        filenames.add(targetFile);                    }                }                if(result.size()>0){                    String targetFile  = targetPath+"data_part_"+(file_count-1)+".csv";                    writeCsv(targetFile,result);                    result.clear();                    filenames.add(targetFile);                }            }catch(Exception e){                e.printStackTrace();            }finally {                if(!StringUtils.isEmpty(br)){                    br.close();                }                if(!StringUtils.isEmpty(fr)){                    fr.close();                }            }        }        return filenames;    }    public static void writeCsv(String csvFile,List contentList) throws IOException {        BufferedWriter bw = null;        try {            bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), _encoding), 1024);            for(int i=0;i

实现写入文件的方法

获取文件的行数

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章