將一個大文件進行拆分爲多個小文件源碼

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;




/**
 * 對一個大文件進行拆分爲幾個小文件    
 * @author jianhong
 *
 */
public class SplitFile {
    /**
     * 對一個大文件進行拆分成多個小文件
     * @param args  第一個參數設置:大文件的文件全路徑             第二個參數設置:輸出文件的路勁以及文件名(注意文件名稱的後綴名在程序中進行設置,默認爲: .txt文件後綴名,若要更改請在程序代碼中進行更改) 
     *            第三個參數設置:拆分成小文件的總的個數      第四個參數設置 :每個小文件包含有多少條數據,最後一個小文件除外   
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
//先讀大文件數據,即獲取大文件的全路徑  
String path=args[0];
File file = new File(path);
//創建buffer字符輸入流
BufferedReader br=null;
//創建文件輸出流
FileWriter fw =null;
BufferedWriter bw =null;

if(file.isFile() && file.exists()) {
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
br = new BufferedReader(isr);

String conditions = null;
String nums = args[2];  //輸入拆分成小文件的總個數
int num = Integer.parseInt(nums);
int  number =Integer.parseInt(args[3]);  //設置每一個小文件應該包含多少條條數

String output=null;

int count=0;
//設置輸出小文件的文件路徑和小文件的文件名稱
String out=args[1];
//創建小文件路徑
for (int i = 0; i < num; i++) {
   //output ="E:/工作表單/用戶畫像文件夾/output測試文件_"+i+".txt";
   //拼接所有小文件的後綴名
   output =out+"_000"+i+".txt";
   //System.out.println("輸出第"+i+"文件:"+output);
   File outfile=new File(output);
   if (!outfile.exists()) {
boolean createFile = outfile.createNewFile();
if (createFile) {
   System.err.println("創建文件:"+output+"成功");
}else {
   System.out.println("文件創建失敗!!!!!");
}
   }
   fw= new FileWriter(outfile, true);
   bw= new BufferedWriter(fw);
   
    //讀大文件數據一行
while ((conditions = br.readLine()) != null) {
   try {
bw.append(conditions);
bw.append("\r\n");
System.out.println(conditions);
//判斷是否達到小文件的條數
count++;
System.out.println("這是第"+count+"條數據");  //count的值是1
   } catch (IOException e) {
e.printStackTrace();
   }
   if (count == (i+1)*number ) {
System.out.println("已完成第"+i+"文件");
break;
   }
}

bw.flush();
bw.close();
   }
  
  //判斷這個拆分的小文件的個數是否合理
   if (conditions !=null) {
count +=1;
    if (count > num*number ) {
       System.err.println("警告:大文件的總條數大於拆分小文件的總條數,所讀大文件的條數大於:"+(count-1)+"條;若數據非常重要請先刪除小文件,重新設置小文件的個數,並重新進行拆分操作");
    }
   }else {
   System.err.println("當前已入條數爲:"+count+"條");
   }
}    
   
br.close();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章