将一个十万行左右的文件按行分解为若干个一万行的文件,总是在最后一个文件中产生问题。例如一个源文件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()】,导致缓冲区的数据最后无法写入文件中,感觉有点儿脸红^_^) 
|