天天看點

Java讀寫檔案遇到的問題(已解決)

将一個十萬行左右的檔案按行分解為若幹個一萬行的檔案,總是在最後一個檔案中産生問題。例如一個源檔案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()】,導緻緩沖區的資料最後無法寫入檔案中,感覺有點兒臉紅^_^)