未命名  

 
 
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\\");
}
}
 
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()