2012-06-17 52 views
3

請看看下面的代碼重新組裝分裂文件正確

package normal; 

import java.io.*; 
import java.util.*; 

public class ReGenerateFiles 
{ 
    private File inputFolder, outputFolder; 
    private String outputFormat, nameOfTheFile; 

    private FileInputStream fis; 
    private FileOutputStream fos; 
    List <Byte> al; 

    private byte[] buffer; 

    private int blockNumber = 1; 

    public ReGenerateFiles(File inputFile, File outputFile, String nameOfTheFile, String outputFormat) 
    { 
     this.inputFolder = inputFile; 
     this.outputFolder = outputFile; 
     this.nameOfTheFile = nameOfTheFile; 
     this.outputFormat = outputFormat; 
    } 

    public void reGenerate() throws IOException 
    { 
     File file[] = inputFolder.listFiles(); 

     for(int i=0;i<file.length;i++) 
     { 
      System.out.println(file[i]); 
     } 

     for(int i=0;i<file.length;i++) 
     { 
      try 
      { 
       buffer = new byte[5000000]; 


       int read = fis.read(buffer, 0, buffer.length); 
       fis.close(); 

       writeBlock(); 


      } 
      catch(IOException io) 
      { 
       io.printStackTrace(); 
      } 
      finally 
      { 
       fis.close(); 
       fos.close(); 
      } 
     } 
    } 

    private void writeBlock()throws IOException 
    { 
     try 
     { 
      fos = new FileOutputStream(outputFolder+"/"+nameOfTheFile+"."+outputFormat,true); 
       fos.write(buffer, 0, buffer.length); 
       fos.flush(); 
       fos.close(); 
     } 
     catch(Exception e) 
     { 
      fos.close(); 
      e.printStackTrace(); 
     } 
     finally 
     { 
      fos.close(); 
     } 
    } 


} 

在這裏,我試圖重新組裝splited文件,恢復到原來的文件。 This is how I split it(選定的答案)

現在,當我嘗試重新組裝它時,出現類似「無法訪問kalimba.mp3」的錯誤,它被另一個程序使用。這發生在執行93個分割文件(還有200個以上)之後。爲什麼會發生這種情況,儘管我已經確定流最終封閉了嗎?

另一個問題,我已經分配了500000作爲字節數組值。我這樣做是因爲我未能根據即將處理的特定文件的原始大小來設置字節數組。我分配的字節數組的值爲

buffer = new byte[(byte)file[i].length(); 

之前,但它沒有工作。

請幫我解決這兩個問題,並正確地重新組裝拆分的文件。

+0

你沒有打開'FileInputStream' – Alexander

+0

感謝您的答覆。無論如何,這將解決我的問題100%?字節呢? –

+0

好的,那有效。現在,該文件的某些部分(例如:如果MP3文件及其某些部分)缺失。如何糾正?請幫忙! –

回答

0

這是因爲緩衝區從來不適合實際內容的大小。它總是50000,實際大小不一。這就是問題