package com.test;
import java.io.*;
public class SegFile {
/**
* 根据需求,直接调用静态方法start来执行操作 参数: rows 为多少行一个文件 int 类型 sourceFilePath 为源文件路径
* String 类型 targetDirectoryPath 为文件分割后存放的目标目录 String 类型
* ---分割后的文件名为源文件+'_'+索引号(从0开始)+扩展名名,例如源文件名为test.txt,则分割后文件名为test_0.txt,以此类推
*/
public static void start(int rows, String sourceFilePath,
String targetDirectoryPath) {
File sourceFile = new File(sourceFilePath);
File targetFile = new File(targetDirectoryPath);
if (!sourceFile.exists() || rows <= 0 || sourceFile.isDirectory()) {
System.out.println("源文件不存在或者输入了错误的行数");
return;
}
if (targetFile.exists()) {
if (!targetFile.isDirectory()) {
System.out.println("目标文件夹错误,不是一个文件夹");
return;
}
} else {
targetFile.mkdirs();
}
System.out.println(System.currentTimeMillis());
try {
//BufferedReader br = new BufferedReader(new FileReader(sourceFile));
BufferedReader br =new BufferedReader(new InputStreamReader(new FileInputStream(sourceFile), "GBK"));
BufferedWriter bw = null;
String fullFileNm = sourceFile.getName();
int extIndex = fullFileNm.lastIndexOf(".");
String noExtFileNm = fullFileNm;
String extFileNm = "";
if(extIndex > 0){
noExtFileNm = fullFileNm.substring(0,extIndex);
extFileNm = fullFileNm.substring(extIndex);
}
String tmpStr = "";
String lineStr = "";
int i = 1, fileCount = 0;
//while (tempData != null) {
while ((lineStr = br.readLine()) != null) {
tmpStr += lineStr + "\r\n";
//System.out.println(lineStr);
if (i % rows == 0) {
//bw = new BufferedWriter(new FileWriter(new File(targetFile.getAbsolutePath() + "/" + s + "_"+ sourceFile.getName())));
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(targetFile.getAbsolutePath() + "/" + noExtFileNm + "_"+ fileCount + extFileNm)), "GBK"));
bw.write(tmpStr);
bw.close();
tmpStr = "";
fileCount += 1;
}
i++;
//tempData = br.readLine();
}
if ((i - 1) % rows != 0) {
//bw = new BufferedWriter(new FileWriter(new File(targetFile.getAbsolutePath() + "/" + s + "_"+ sourceFile.getName())));
bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(targetFile.getAbsolutePath() + "/" + noExtFileNm + "_"+ fileCount + extFileNm)), "GBK"));
bw.write(tmpStr);
bw.close();
br.close();
fileCount += 1;
}
System.out.println("文件分割结束,共分割成了" + fileCount + "个文件");
} catch (Exception e) {
}
System.out.println(System.currentTimeMillis());
}
// 测试
public static void main(String args[]) {
SegFile.start(200, "C:\\TEMP\\mchnt_2000_bt_2.txt", "C:\\TEMP\\test\\");
//SegFile.start(5, "C:\\TEMP\\main.txt", "C:\\TEMP\\test\\");
}
}