用JAVA實現(xiàn)文件分隔功能[轉(zhuǎn)]
Posted on 2009-06-13 15:31 帥子 閱讀(293) 評論(0) 編輯 收藏 所屬分類: J2EE技術(shù)專區(qū)以下是我寫的幾個用JAVA實現(xiàn)將.txt文件分隔成小文件的程序,供大家參考下
程序一:
/**
?*?文件分隔
?*/
package?com.basic.io;
import?java.io.BufferedReader;
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileOutputStream;
import?java.io.FileReader;
import?java.io.FileWriter;
import?java.io.IOException;
import?java.io.InputStreamReader;
/**
?*?@author?Administrator
?*
?*/
public?class?FileSeparator?{
????/**
?????*?按字節(jié)分隔
?????*?@param?sourceFileUrl?源文件路徑如:c:/a.txt
?????*?@param?targetFileUrl?目標(biāo)文件路徑文件夾(最好在盤符下,我沒有創(chuàng)建文件夾):?c:/
?????*/
????public?void?separateFileByByte(String?sourceFileUrl,?String?targetFileUrl)?{
????????File?sourceFile?=?new?File(sourceFileUrl);
????????String?sourceFileName?=?sourceFile.getName().split(".txt")[0];?//獲得源文件名稱
????????try?{
????????????FileInputStream?fis?=?new?FileInputStream(sourceFile);?//源文件文件流
????????????int?temp;
????????????FileOutputStream?fos?=?null;?//目標(biāo)文件文件流
????????????int?size?=?0;?//記錄文件大小
????????????int?countFile?=?1;?//子文件數(shù)目
????????????File?targetFile?=?null;
????????????do?{
???????????????
????????????????if?(size?%?100?==?0)?{
????????????????????String?targetFileName?=?targetFileUrl?+?sourceFileName?+?countFile?+?".txt";?//目標(biāo)文件名稱,以源文件名稱加數(shù)據(jù)命名
????????????????????targetFile?=?new?File(targetFileName);
????????????????????if?(fos?!=?null)?{
????????????????????????fos.flush();?//刷新該流的緩沖
????????????????????????fos.close();?//關(guān)閉流
????????????????????}
????????????????????fos?=?new?FileOutputStream(targetFile);
????????????????????countFile++;
????????????????}
???????????????
????????????????temp?=?fis.read();?//讀文件
????????????????size++;
????????????????fos.write(temp);?//寫文件
???????????????
????????????}?while?(fis.available()>0);????//判斷源文件是否還有流,即有沒有讀完
???????????
????????????fis.close();
????????????fos.flush();
????????????fos.close();
????????????System.out.println("File?separate?End!"?);
????????}?catch?(Exception?e)?{
????????????e.printStackTrace();
????????}
????}
???
????/**
?????*?按字符分隔
?????*?@param?sourceFileUrl
?????*?@param?targetFileUrl
?????*/
????public?void?separateFileByChar(String?sourceFileUrl,?String?targetFileUrl)?{
????????File?sourceFile?=?new?File(sourceFileUrl);
????????String?sourceFileName?=?sourceFile.getName().split(".txt")[0];?//獲得源文件名稱
????????try?{
????????????FileReader?fr?=?new?FileReader(sourceFile);?//源文件文件流
????????????System.out.println("encoding:"?+?fr.getEncoding());
????????????int?temp;
????????????FileWriter?fw?=?null;?//目標(biāo)文件文件流
????????????int?size?=?0;?//記錄文件大小
????????????int?countFile?=?1;?//子文件數(shù)目
????????????File?targetFile?=?null;
????????????do?{
???????????????
????????????????if?(size?%?100?==?0)?{
????????????????????String?targetFileName?=?targetFileUrl?+?sourceFileName?+?countFile?+?".txt";?//目標(biāo)文件名稱,以源文件名稱加數(shù)據(jù)命名
????????????????????targetFile?=?new?File(targetFileName);
????????????????????if?(fw?!=?null)?{
????????????????????????fw.flush();?//刷新該流的緩沖
????????????????????????fw.close();//關(guān)閉流
????????????????????}
????????????????????fw?=?new?FileWriter(targetFile);
????????????????????countFile++;
????????????????}
???????
????????????????temp?=?fr.read();//讀文件
????????????????size++;
????????????????fw.write(temp);//寫文件
???????????????
????????????}?while?(temp?!=?-1);//判斷源文件是否還有流,即有沒有讀完
???????????
????????????fr.close();
????????????fw.flush();
????????????fw.close();
????????????System.out.println("File?separate?End!"?);
????????}?catch?(Exception?e)?{
????????????e.printStackTrace();
????????}
????}
???
????/**
?????*?@param?args
?????*/
????public?static?void?main(String[]?args)?{
???????
????????BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(System.in));
????????String?sourceFileUrl?=?null;
????????String?targetFileUrl?=?null;
????????//輸入源文件路徑
????????System.out.println("Source?File?Url:?\t");
????????try?{
????????????sourceFileUrl?=?br.readLine();
????????}?catch?(IOException?e)?{???????????
????????????e.printStackTrace();
????????}
????????//輸入目標(biāo)文件路徑
????????System.out.println("\nTarget?File?Url:?\t");
????????try?{
????????????targetFileUrl?=?br.readLine();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
???????
????????System.out.println("Source?File:?"?+?sourceFileUrl?+?"\nTarget?File:?"?+?targetFileUrl);
????????FileSeparator?fs?=?new?FileSeparator();
????????fs.separateFileByByte(sourceFileUrl,?targetFileUrl);
????}
}
程序二:
/**
?*?用緩沖流實現(xiàn)文件分隔
?*/
package?com.basic.io;
import?java.io.*;
public?class?TestBufferStream?{
??public?static?void?main(String[]?args)?{
????try?{
??????BufferedReader?br?=?new?BufferedReader(new?FileReader("c:/Java編碼規(guī)范.txt"));
??????BufferedWriter?bw?=?null;
??????String?s?=?null;?//單行內(nèi)容
??????int?countLine?=?0;?//總行數(shù)
??????int?countFile?=?1;?//子文件數(shù)
??????while((s=br.readLine())!=null){
????????if?(countLine?%?50?==?0)?{?
????????????if?(bw?!=?null)?{
????????????????bw.flush();
????????????????bw.close();
????????????}
????????????bw?=?new?BufferedWriter(new?FileWriter("c:/Java編碼規(guī)范"?+?countFile?+?".txt"));
????????????countFile++;???????????
????????}
????????bw.write(s);
????????bw.newLine();
????????System.out.println(s);
????????countLine++;
??????}
??????System.out.println("countLine:"?+?countLine);
?????
??????bw.close();
??????if(countLine?!=?0){
??????????bw.flush();
??????????bw.close();
????????????????
??????}
????}?catch?(IOException?e)?{?e.printStackTrace();}
??}
}
程序三:
/**
?*?用字符流實現(xiàn)文件分隔
?*/
package?com.basic.io;
import?java.io.FileReader;
import?java.io.FileWriter;
import?java.io.IOException;
/**
?*?@author?Administrator
?*
?*/
public?class?TestFileReader?{
????public?static?final?int?charSize?=?1024;
????/**
?????*?@param?args
?????*/
????public?static?void?main(String[]?args)?{
????????//?TODO?Auto-generated?method?stub
????????try?{
????????????FileReader?fr?=?new?FileReader("c:/Java編碼規(guī)范.txt");
????????????FileWriter?fw?=?null;
????????????char[]?bfc?=?new?char[charSize];
????????????int?temp;?//單個字符
????????????int?countWord?=?0;?//字符數(shù)
????????????int?countFile?=?1;?//子文件數(shù)
????????????while((temp=fr.read())!=-1){
??????????????if?(countWord?%?charSize?==?0)?{???????????
??????????????????fw?=?new?FileWriter("c:/Java編碼規(guī)范"?+?countFile?+?".txt");???????????
??????????????????countFile++;
??????????????}
??????????????bfc[countWord]?=?(char)temp;
?????????????
??????????????if?(countWord?==?charSize?-1)?{
??????????????????fw.write(bfc);
??????????????????fw.flush();
??????????????????fw.close();
??????????????????countWord?=?0;
??????????????}????else?{
??????????????????countWord++;
??????????????}
????????????}
????????????fr.close();
????????????if?(countWord?>?0)?{
????????????????fw.write(bfc);
????????????????fw.flush();
????????????????fw.close();
????????????}
??????????}?catch?(IOException?e)?{
??????????????e.printStackTrace();
??????????}
????}
}
程序一:
/**
?*?文件分隔
?*/
package?com.basic.io;
import?java.io.BufferedReader;
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileOutputStream;
import?java.io.FileReader;
import?java.io.FileWriter;
import?java.io.IOException;
import?java.io.InputStreamReader;
/**
?*?@author?Administrator
?*
?*/
public?class?FileSeparator?{
????/**
?????*?按字節(jié)分隔
?????*?@param?sourceFileUrl?源文件路徑如:c:/a.txt
?????*?@param?targetFileUrl?目標(biāo)文件路徑文件夾(最好在盤符下,我沒有創(chuàng)建文件夾):?c:/
?????*/
????public?void?separateFileByByte(String?sourceFileUrl,?String?targetFileUrl)?{
????????File?sourceFile?=?new?File(sourceFileUrl);
????????String?sourceFileName?=?sourceFile.getName().split(".txt")[0];?//獲得源文件名稱
????????try?{
????????????FileInputStream?fis?=?new?FileInputStream(sourceFile);?//源文件文件流
????????????int?temp;
????????????FileOutputStream?fos?=?null;?//目標(biāo)文件文件流
????????????int?size?=?0;?//記錄文件大小
????????????int?countFile?=?1;?//子文件數(shù)目
????????????File?targetFile?=?null;
????????????do?{
???????????????
????????????????if?(size?%?100?==?0)?{
????????????????????String?targetFileName?=?targetFileUrl?+?sourceFileName?+?countFile?+?".txt";?//目標(biāo)文件名稱,以源文件名稱加數(shù)據(jù)命名
????????????????????targetFile?=?new?File(targetFileName);
????????????????????if?(fos?!=?null)?{
????????????????????????fos.flush();?//刷新該流的緩沖
????????????????????????fos.close();?//關(guān)閉流
????????????????????}
????????????????????fos?=?new?FileOutputStream(targetFile);
????????????????????countFile++;
????????????????}
???????????????
????????????????temp?=?fis.read();?//讀文件
????????????????size++;
????????????????fos.write(temp);?//寫文件
???????????????
????????????}?while?(fis.available()>0);????//判斷源文件是否還有流,即有沒有讀完
???????????
????????????fis.close();
????????????fos.flush();
????????????fos.close();
????????????System.out.println("File?separate?End!"?);
????????}?catch?(Exception?e)?{
????????????e.printStackTrace();
????????}
????}
???
????/**
?????*?按字符分隔
?????*?@param?sourceFileUrl
?????*?@param?targetFileUrl
?????*/
????public?void?separateFileByChar(String?sourceFileUrl,?String?targetFileUrl)?{
????????File?sourceFile?=?new?File(sourceFileUrl);
????????String?sourceFileName?=?sourceFile.getName().split(".txt")[0];?//獲得源文件名稱
????????try?{
????????????FileReader?fr?=?new?FileReader(sourceFile);?//源文件文件流
????????????System.out.println("encoding:"?+?fr.getEncoding());
????????????int?temp;
????????????FileWriter?fw?=?null;?//目標(biāo)文件文件流
????????????int?size?=?0;?//記錄文件大小
????????????int?countFile?=?1;?//子文件數(shù)目
????????????File?targetFile?=?null;
????????????do?{
???????????????
????????????????if?(size?%?100?==?0)?{
????????????????????String?targetFileName?=?targetFileUrl?+?sourceFileName?+?countFile?+?".txt";?//目標(biāo)文件名稱,以源文件名稱加數(shù)據(jù)命名
????????????????????targetFile?=?new?File(targetFileName);
????????????????????if?(fw?!=?null)?{
????????????????????????fw.flush();?//刷新該流的緩沖
????????????????????????fw.close();//關(guān)閉流
????????????????????}
????????????????????fw?=?new?FileWriter(targetFile);
????????????????????countFile++;
????????????????}
???????
????????????????temp?=?fr.read();//讀文件
????????????????size++;
????????????????fw.write(temp);//寫文件
???????????????
????????????}?while?(temp?!=?-1);//判斷源文件是否還有流,即有沒有讀完
???????????
????????????fr.close();
????????????fw.flush();
????????????fw.close();
????????????System.out.println("File?separate?End!"?);
????????}?catch?(Exception?e)?{
????????????e.printStackTrace();
????????}
????}
???
????/**
?????*?@param?args
?????*/
????public?static?void?main(String[]?args)?{
???????
????????BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(System.in));
????????String?sourceFileUrl?=?null;
????????String?targetFileUrl?=?null;
????????//輸入源文件路徑
????????System.out.println("Source?File?Url:?\t");
????????try?{
????????????sourceFileUrl?=?br.readLine();
????????}?catch?(IOException?e)?{???????????
????????????e.printStackTrace();
????????}
????????//輸入目標(biāo)文件路徑
????????System.out.println("\nTarget?File?Url:?\t");
????????try?{
????????????targetFileUrl?=?br.readLine();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
???????
????????System.out.println("Source?File:?"?+?sourceFileUrl?+?"\nTarget?File:?"?+?targetFileUrl);
????????FileSeparator?fs?=?new?FileSeparator();
????????fs.separateFileByByte(sourceFileUrl,?targetFileUrl);
????}
}
程序二:
/**
?*?用緩沖流實現(xiàn)文件分隔
?*/
package?com.basic.io;
import?java.io.*;
public?class?TestBufferStream?{
??public?static?void?main(String[]?args)?{
????try?{
??????BufferedReader?br?=?new?BufferedReader(new?FileReader("c:/Java編碼規(guī)范.txt"));
??????BufferedWriter?bw?=?null;
??????String?s?=?null;?//單行內(nèi)容
??????int?countLine?=?0;?//總行數(shù)
??????int?countFile?=?1;?//子文件數(shù)
??????while((s=br.readLine())!=null){
????????if?(countLine?%?50?==?0)?{?
????????????if?(bw?!=?null)?{
????????????????bw.flush();
????????????????bw.close();
????????????}
????????????bw?=?new?BufferedWriter(new?FileWriter("c:/Java編碼規(guī)范"?+?countFile?+?".txt"));
????????????countFile++;???????????
????????}
????????bw.write(s);
????????bw.newLine();
????????System.out.println(s);
????????countLine++;
??????}
??????System.out.println("countLine:"?+?countLine);
?????
??????bw.close();
??????if(countLine?!=?0){
??????????bw.flush();
??????????bw.close();
????????????????
??????}
????}?catch?(IOException?e)?{?e.printStackTrace();}
??}
}
程序三:
/**
?*?用字符流實現(xiàn)文件分隔
?*/
package?com.basic.io;
import?java.io.FileReader;
import?java.io.FileWriter;
import?java.io.IOException;
/**
?*?@author?Administrator
?*
?*/
public?class?TestFileReader?{
????public?static?final?int?charSize?=?1024;
????/**
?????*?@param?args
?????*/
????public?static?void?main(String[]?args)?{
????????//?TODO?Auto-generated?method?stub
????????try?{
????????????FileReader?fr?=?new?FileReader("c:/Java編碼規(guī)范.txt");
????????????FileWriter?fw?=?null;
????????????char[]?bfc?=?new?char[charSize];
????????????int?temp;?//單個字符
????????????int?countWord?=?0;?//字符數(shù)
????????????int?countFile?=?1;?//子文件數(shù)
????????????while((temp=fr.read())!=-1){
??????????????if?(countWord?%?charSize?==?0)?{???????????
??????????????????fw?=?new?FileWriter("c:/Java編碼規(guī)范"?+?countFile?+?".txt");???????????
??????????????????countFile++;
??????????????}
??????????????bfc[countWord]?=?(char)temp;
?????????????
??????????????if?(countWord?==?charSize?-1)?{
??????????????????fw.write(bfc);
??????????????????fw.flush();
??????????????????fw.close();
??????????????????countWord?=?0;
??????????????}????else?{
??????????????????countWord++;
??????????????}
????????????}
????????????fr.close();
????????????if?(countWord?>?0)?{
????????????????fw.write(bfc);
????????????????fw.flush();
????????????????fw.close();
????????????}
??????????}?catch?(IOException?e)?{
??????????????e.printStackTrace();
??????????}
????}
}