<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    文件的分割與合并

    Posted on 2009-05-24 21:31 啥都寫點 閱讀(230) 評論(0)  編輯  收藏 所屬分類: J2SE
    關鍵技術:
    • 分割文件時,指定小文件的長度(字節數),根據File的length方法獲得大文件的長度,以確定目標小文件的數目。用文件輸入流順序地讀取大文件的數據,將數據分流到每個小文件的輸出流中。
    • 合并文件時,讀取每個小文件的輸入流,將所有的內容按順序寫入到目標大文件的輸出流中。

    package book.io;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;

    /**
     * 文件分割合并器,將大文件分割成若干小文件;將多個小文件合并到一個大文件。
     
    */
    public class FileDivisionUniter {
        
    //分割后的文件名后綴
        public static final String SUFFIX = ".pp";

        
    /**
         * 分割文件
         * 
    @param fileName    待分割的文件名
         * 
    @param size    小文件的大小,單位字節
         * 
    @return        分割成的小文件的文件名
         * 
    @throws Exception
         
    */
        
    public static String[] divide(String fileName, long size) throws Exception {

            File inFile 
    = new File(fileName);
            
    if (!inFile.exists() || (!inFile.isFile())) {
                
    throw new Exception("指定文件不存在!");
            }
            
    //獲得被分割文件父文件,將來被分割成的小文件便存在這個目錄下
            File parentFile = inFile.getParentFile();
            
            
    //    取得文件的大小
            long fileLength = inFile.length(); 
            
    if (size <=0){
                size 
    = fileLength / 2;
            }
            
    // 取得被分割后的小文件的數目
            int num = (fileLength % size != 0? (int)(fileLength / size + 1)
                    : (
    int)(fileLength / size); 
            
    // 存放被分割后的小文件名
            String[] outFileNames = new String[num];
            
    // 輸入文件流,即被分割的文件
            FileInputStream in = new FileInputStream(inFile);
            
            
    // 讀輸入文件流的開始和結束下標
            long inEndIndex = 0;
            
    int inBeginIndex = 0;
            
            
    //根據要分割的數目輸出文件
            for (int outFileIndex = 0; outFileIndex < num; outFileIndex++) {
                
    //對于前num - 1個小文件,大小都為指定的size
                File outFile = new File(parentFile, inFile.getName()
                        
    + outFileIndex + SUFFIX);
                
    // 構建小文件的輸出流
                FileOutputStream out = new FileOutputStream(outFile);
                
    //將結束下標后移size
                inEndIndex += size;
                inEndIndex 
    = (inEndIndex > fileLength) ? fileLength : inEndIndex;
                
    // 從輸入流中讀取字節存儲到輸出流中
                for (; inBeginIndex < inEndIndex; inBeginIndex++) {
                    out.write(in.read());
                }
                out.close();
                outFileNames[outFileIndex] 
    = outFile.getAbsolutePath();
            }
            in.close();
            
    return outFileNames;
        }

        
    /**
         * 合并文件
         * 
    @param fileNames        待合并的文件名,是一個數組
         * 
    @param TargetFileName    目標文件名
         * 
    @return        目標文件的全路徑
         * 
    @throws Exception
         
    */
        
    public static String unite(String[] fileNames, String TargetFileName)
                
    throws Exception {
            File inFile 
    = null
            
    //構建文件輸出流
            File outFile = new File(TargetFileName);
            FileOutputStream out 
    = new FileOutputStream(outFile);

            
    for (int i = 0; i < fileNames.length; i++) {
                
    // 打開文件輸入流
                inFile = new File(fileNames[i]);
                FileInputStream in 
    = new FileInputStream(inFile);
                
    // 從輸入流中讀取數據,并寫入到文件數出流中
                int c;
                
    while ((c = in.read()) != -1) {
                    out.write(c);
                }
                in.close();
            }
            out.close();
            
            
    return outFile.getAbsolutePath();
        }

        
    public static void main(final String[] args) throws Exception {
            
    //分割文件
            String fileName = "C:/temp/temp.xls";
            
    long size = 1000;
            String[] fileNames 
    = FileDivisionUniter.divide(fileName, size);
            System.out.println(
    "分割文件" + fileName + "結果:");
            
    for (int i=0; i<fileNames.length; i++){
                System.out.println(fileNames[i]);    
            }
            
    //合并文件
            String newFileName = "C:/temp/newTemp.xls";
            System.out.println(
    "合并文件結果:" + 
                    FileDivisionUniter.unite(fileNames, newFileName));
        }
    }



                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 青柠影视在线观看免费高清| 亚洲精品久久无码av片俺去也| 一本久久免费视频| 国产成人青青热久免费精品| 中国亚洲呦女专区| 免费A级毛片无码免费视| 亚洲视频中文字幕在线| 中文字幕成人免费视频| 91精品国产亚洲爽啪在线影院| 少妇无码一区二区三区免费| 亚洲国产精品无码av| 成人免费乱码大片A毛片| 亚洲人成色77777| 国产一精品一AV一免费| 亚洲一二成人精品区| 67pao强力打造国产免费| 精品丝袜国产自在线拍亚洲| 麻豆国产精品入口免费观看| 亚洲色大成网站www| 日日夜夜精品免费视频| 免费人成网上在线观看| 亚洲伊人久久精品影院| 4虎1515hh永久免费| 亚洲色一区二区三区四区| 亚洲AV成人潮喷综合网| 99久久免费国产特黄| 亚洲视频一区在线观看| 青青青国产免费一夜七次郎 | 国产成人亚洲精品电影| 亚洲午夜爱爱香蕉片| 无码一区二区三区免费| 日韩亚洲产在线观看| 亚洲国产日韩成人综合天堂| 国产一精品一AV一免费| 亚洲色在线无码国产精品不卡| 亚洲日韩在线观看免费视频| 99久久人妻精品免费一区| 99亚洲精品卡2卡三卡4卡2卡| 国产成人无码综合亚洲日韩| 成年在线观看网站免费| 一本久久A久久免费精品不卡|