用JAVA实现将一个文件分隔成几个小文件?
下面是我实现的一个程序,希望大家能给出更好的方法/**
 * 用JAVA实现将一个文件分隔成几个小文件
 */
package net.csdn.blog.johnston;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;/**
 * @author johnston
 * 
 * @version 2009-06-05
 */
public class FileSeparator {    /**
     * 按字节分隔
     * @param sourceFileUrl 源文件路径如:c:/a.txt
     * @param targetFileUrl 目标文件路径文件夹(最好在盘符下,我没有创建文件夹): c:/
     */
    public void separateFileByByte(String sourceFileUrl, String targetFileUrl) {
        File sourceFile = new File(sourceFileUrl);
        String sourceFileName = sourceFile.getName().split(".txt")[0]; //获得源文件名称
        try {
            FileInputStream fis = new FileInputStream(sourceFile); //源文件文件流
            int temp;
            FileOutputStream fos = null; //目标文件文件流
            int size = 0; //记录文件大小
            int countFile = 1; //子文件数目
            File targetFile = null;
            do {
               
                if (size % 100 == 0) {
                    String targetFileName = targetFileUrl + sourceFileName + countFile + ".txt"; //目标文件名称,以源文件名称加数据命名
                    targetFile = new File(targetFileName);
                    if (fos != null) {
                        fos.flush(); //刷新该流的缓冲
                        fos.close(); //关闭流
                    }
                    fos = new FileOutputStream(targetFile);
                    countFile++;
                }
               
                temp = fis.read(); //读文件
                size++;
                fos.write(temp); //写文件
               
            } while (fis.available()>0);    //判断源文件是否还有流,即有没有读完
           
            fis.close();
            fos.flush();
            fos.close();
            System.out.println("File separate End!" );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
   
    /**
     * 按字符分隔
     * @param sourceFileUrl 源文件路径如:c:/a.txt
     * @param targetFileUrl 目标文件路径文件夹(最好在盘符下,我没有创建文件夹): c:/
     */
    public void separateFileByChar(String sourceFileUrl, String targetFileUrl) {
        File sourceFile = new File(sourceFileUrl);
        String sourceFileName = sourceFile.getName().split(".txt")[0]; //获得源文件名称
        try {
            FileReader fr = new FileReader(sourceFile); //源文件文件流
            System.out.println("encoding:" + fr.getEncoding());
            int temp;
            FileWriter fw = null; //目标文件文件流
            int size = 0; //记录文件大小
            int countFile = 1; //子文件数目
            File targetFile = null;
            do {
               
                if (size % 100 == 0) {
                    String targetFileName = targetFileUrl + sourceFileName + countFile + ".txt"; //目标文件名称,以源文件名称加数据命名
                    targetFile = new File(targetFileName);
                    if (fw != null) {
                        fw.flush(); //刷新该流的缓冲
                        fw.close();//关闭流
                    }
                    fw = new FileWriter(targetFile);
                    countFile++;
                }
       
                temp = fr.read();//读文件
                size++;
                fw.write(temp);//写文件
               
            } while (temp != -1);//判断源文件是否还有流,即有没有读完
           
            fr.close();
            fw.flush();
            fw.close();
            System.out.println("File separate End!" );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
   
    /**
     * 按缓冲字符分隔
     * @param sourceFileUrl 源文件路径如:c:/a.txt
     * @param targetFileUrl 目标文件路径文件夹(最好在盘符下,我没有创建文件夹): c:/
     */
    public void separateFileByBuffer (String sourceFileUrl, String targetFileUrl) {
        File sourceFile = new File(sourceFileUrl);
        String sourceFileName = sourceFile.getName().split(".txt")[0]; //获得源文件名称
        try {
         BufferedReader br = new BufferedReader(new FileReader(sourceFile)); //源文件文件流
         BufferedWriter bw = null; //目标文件文件流
         String s = null; //单行内容        
            int countLine = 0; //总行数
            int countFile = 1; //子文件数
            
            while((s=br.readLine())!=null){
                if (countLine % 200 == 0) { //200行分隔一个文件
                    if (bw != null) {
                        bw.flush();
                        bw.close();
                    }
                    String targetFileName = targetFileUrl + sourceFileName + countFile + ".txt"; //目标文件名称,以源文件名称加数据命名
                    bw = new BufferedWriter(new FileWriter(targetFileName));
                    countFile++;           
                }
                bw.write(s);
                bw.newLine();
                System.out.println(s);
                countLine++;
              }
              System.out.println("countLine:" + countLine);
             
              bw.close();
              if(countLine != 0){
                  bw.flush();
                  bw.close();
                        
              }
              System.out.println("File separate End!" );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
       
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String sourceFileUrl = null;
        String targetFileUrl = null;
        //输入源文件路径
        System.out.println("Source File Url: \t");
        try {
            sourceFileUrl = br.readLine();
        } catch (IOException e) {           
            e.printStackTrace();
        }
        //输入目标文件路径
        System.out.println("\nTarget File Url: \t");
        try {
            targetFileUrl = br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
       
        System.out.println("Source File: " + sourceFileUrl + "\nTarget File: " + targetFileUrl);
        FileSeparator fs = new FileSeparator();
        fs.separateFileByByte(sourceFileUrl, targetFileUrl);
        fs.separateFileByChar(sourceFileUrl, targetFileUrl);
        fs.separateFileByBuffer(sourceFileUrl, targetFileUrl);
    }}