一、创建相应的工具类
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 条评论) “” |