快捷搜索:  汽车  科技

java实现压缩指定文件(java实现对文件进行切割)

java实现压缩指定文件(java实现对文件进行切割)

一、创建相应的工具类

public class SplitFileUtil { public static final String _encoding = "GB2312"; /** * * @param sourceFileUrl 源路径 * @param targetPath 目标路径 * @return * @throws IOException */ public static List<String> separateFileByLine(String sourceFileUrl String targetPath) throws IOException { List<String> 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<file_count;i ){ file_start_index = (i 1)*line_num_per_file; countArray[i] = file_start_index; } }else{ //将每个文件的起始索引记录下来 countArray = new Long[file_count]; long file_start_index = 0; for(int i=0;i<file_count;i ){ file_start_index = (i 1)*Constants.line_num_per_file; countArray[i] = file_start_index; } } /*处理文件*/ InputStreamReader fr = null; BufferedReader br = null; try { fr = new InputStreamReader(new FileInputStream(sourceFileUrl) _encoding); br = new BufferedReader(fr); int count = 0; int _index = 0; String rec ;// 一行 List<String> 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<String> contentList) throws IOException { BufferedWriter bw = null; try { bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile) _encoding) 1024); for(int i=0;i<contentList.size();i ){ String str = contentList.get(i); bw.write(str); bw.newLine(); } bw.flush(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally{ if(!StringUtils.isEmpty(bw)){ bw.close(); } } } public static long getFileLineNum(String filename) throws IOException { long time1 = System.currentTimeMillis(); //取出文件总行数 long count = 0; InputStreamReader fr = null; BufferedReader br = null; try { fr = new InputStreamReader(new FileInputStream(filename) _encoding); br = new BufferedReader(fr); // 读取一行 while (br.readLine() != null) { count ; } }catch(Exception e){ e.printStackTrace(); }finally { if(!StringUtils.isEmpty(br)){ br.close(); } if(!StringUtils.isEmpty(fr)){ fr.close(); } } long time2 = System.currentTimeMillis(); System.out.println("getFileLineNum==[" count "] time is:" (time2-time1)); return count; } }

java实现压缩指定文件(java实现对文件进行切割)(1)

java实现压缩指定文件(java实现对文件进行切割)(2)

java实现压缩指定文件(java实现对文件进行切割)(3)

java实现压缩指定文件(java实现对文件进行切割)(4)

java实现压缩指定文件(java实现对文件进行切割)(5)

实现写入文件的方法

java实现压缩指定文件(java实现对文件进行切割)(6)

获取文件的行数

猜您喜欢: