將一個大文件進行拆分爲多個小文件源碼
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();
}
}
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();
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.