将一個十萬行左右的檔案按行分解為若幹個一萬行的檔案,總是在最後一個檔案中産生問題。例如一個源檔案58089行,生成的前五個檔案每個一萬行沒問題,但是最後一個檔案卻隻有七千多行,且最後一行沒有寫完。程式運作沒有任何異常抛出。代碼如下:
import java.io.*;
import java.util.*;
public class FileParter {
private ArrayList fileNames = new ArrayList();
public FileParter(String sourceFileName) {
File father = new File(sourceFileName);
try {
LineNumberReader r = new LineNumberReader(new FileReader(father));
int count=1;//行計數器
int fileNum=0;//目标檔案序号(檔案名)
File f = new File(fileNum+".txt");//建立第一個目标檔案
BufferedWriter fw = new BufferedWriter(new FileWriter(f));//建立第一個目标檔案讀取器
while(r.ready()){
if(count==10001){
count=1;
fileNum++;
fw.close();
f = new File(fileNum+".txt");
this.fileNames.add(fileNum+".txt");
fw = new BufferedWriter(new FileWriter(f));
}
String tmpS = r.readLine();
fw.write(tmpS,0,11);
fw.newLine();
//Debug:
if(fileNum==5 && count>7000)
System.out.println(tmpS+"|"+count);
count++;
}
System.out.println(r.getLineNumber());
} catch (Exception e) {
e.printStackTrace();
}
}
//得到目标檔案清單
public String[] getFileNames(){
int size = this.fileNames.size();
String[] names = new String[size];
for(int i=0;i<size;i++)
names[i] = (String)this.fileNames.get(i);
return names;
}
public static void main(String[] args) {
FileParter fp = new FileParter("20050408001.txt");
String[] names = fp.getFileNames();
for(int i=0;i<names.length;i++)
System.out.println(names[i]);
}
}
希望大家指點錯誤出在哪裡。
(PS:今天複查程式發現忘了關閉BufferedFileWriter 【close()】,導緻緩沖區的資料最後無法寫入檔案中,感覺有點兒臉紅^_^)