歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java 實現大文件的分割與合並

  1. package namespace;  
  2. import java.io.*;  
  3. public class Study  
  4. {  
  5.     private  static int length=1024;//可以設置文件在讀取時一次讀取文件的大小    
  6.       
  7.     /* 
  8.      * 文件的切割 
  9.      * String path   切割文件的路徑 
  10.      * size      子文件的大小 
  11.      * */  
  12.     public static void  filesplit(String path,int size)throws Exception  
  13.     {  
  14.         if(path==null)  
  15.             throw new Exception("源文件不能為空...");  
  16.         File file=new File(path);  
  17.         if(!file.exists())  
  18.             throw new Exception("源文件不存在...");  
  19.         long num=file.length()%size==0?file.length()/size:file.length()/size+1;  
  20.         String list[]=new String[(int)num];//用於存放分割後的結果   
  21.         FileInputStream reader=new FileInputStream(file);  
  22.         long beginIndex=0,endIndex=0;  
  23.         int readcount=0;byte buffer[]=new byte[length];  
  24.         for(int i=0;i<num;i++)  
  25.         {  
  26.             list[i]=file.getAbsolutePath()+".depart"+i+".rmvb";  
  27.             FileOutputStream writer=new FileOutputStream(list[i]);  
  28.             endIndex=(endIndex+size)>file.length()?file.length():endIndex+size;  
  29.             for(;beginIndex<endIndex;)  
  30.             {  
  31.                 if(endIndex-beginIndex>=length) {  
  32.                  readcount=reader.read(buffer);  
  33.                  beginIndex+=readcount;  
  34.                  writer.write(buffer);  
  35.                 }else {  
  36.                     //下面的就不能直接讀取1024個字節了,就要一個一個字節的讀取了   
  37.                     for(;beginIndex<endIndex;beginIndex++)  
  38.                     {  
  39.                         writer.write(reader.read());  
  40.                     }  
  41.                     continue;  
  42.                 }  
  43.             }  
  44.             writer.close();  
  45.               
  46.         }  
  47.     }  
  48.     public static void union(String path,String newString)throws Exception  
  49.     {  
  50.         File file=new File(path);  
  51.         File list[]=file.listFiles();  
  52.         File newFile=new File(newString);  
  53.         byte buffer[]=new byte[1024];  
  54.         int readcount;  
  55.         if(!newFile.getParentFile().exists())  
  56.             throw new Exception("你合並的文件夾的不存在...");  
  57.         FileOutputStream writer=new FileOutputStream(newString);  
  58.         for(File f:list)  
  59.         {  
  60.             FileInputStream reader=new FileInputStream(f);  
  61.             while((readcount=reader.read(buffer))!=-1)  
  62.             {  
  63.                 writer.write(buffer);  
  64.             }  
  65.             reader.close();  
  66.         }  
  67.         writer.close();  
  68.     }  
  69.     public static void main(String args[])throws Exception  
  70.     {  
  71.      // filesplit("F:\\movie\\movie.rmvb",104857600);   
  72.         //union("F:\\movie\\","F:\\movie.rmvb");   
  73.     }  
  74. }  
  75. /* 
  76.  *                      文件的分割與合並 
  77.  *          1.文件的分割,原理是用輸入流去讀取文件,將讀取規定大小的流再輸出支指定的文件,直到整個把整個文件讀取結束. 
  78.  *          2.文件合並,文件的合並原理與分割正好想反,就是把所有的文件都讀取到一個輸入流中,然後再把輸入流中的東西全部輸出到 
  79.  *                  同一個文件輸出流中,這樣就可以把分割的文件合並到一個文件中去了. 並且文件的大小和原來也會一樣 .  
  80.  *          3.上面的程序我試著分割一個600多M 的電影,分割是成功了,但只是分割的第一個文件可以播放,而後面的幾個文件都不可以播放,我也不知道為什麼, 
  81.  *                  可能是視頻文件裡面有什麼自定的格式吧...不過分割後再把所有的文件合並,合並後文件大小和之前一樣,而且還可以插入,說明文件沒有分割壞 
  82.  *                  至於單個的文件為什麼不能插入,這個以後用到的時候再去研究..現在還是把Java的基礎搞懂再說.....  
  83.  *                                                                                              2011.10.21 9:43 
  84.  *  *  *  
  85.  *  
  86.  *  
  87.  * */  
Copyright © Linux教程網 All Rights Reserved