2011-09-06 41 views
0
public static void writeFile(String theFileName, String theFilePath) 
{ 
    try { 
     File currentFile = new File("plugins/mcMMO/Resources/"+theFilePath+theFileName); 
     //System.out.println(theFileName); 
     @SuppressWarnings("static-access") 
     JarFile jar = new JarFile(plugin.mcmmo); 
     JarEntry entry = jar.getJarEntry("resources/"+theFileName); 
     InputStream is = jar.getInputStream(entry); 
     byte[] buf = new byte[(int)entry.getSize()]; 
     is.read(buf, 0, buf.length); 
     FileOutputStream os = new FileOutputStream(currentFile); 
     os.write(buf); 
     os.close(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

好吧,所以在我的節目,我有保留節目的罐,當程序運行它傳遞給這個函數被寫入到特定的文件中的各種資源用戶電腦的硬盤。一切都被寫入,但只有圖像出來100%正確。聲音文件並不那麼幸運。使用的JarEntry寫聲音文件按預期工作不

基本上,我不能得到的聲音要正確寫入,他們的文件大小是正確的,但他們只包含一秒鐘的音頻,而不是他們的全長音頻。我在這裏錯過了什麼嗎?我似乎已經做好了一切,但如果那是真的,我不會在這裏發帖。

我盡我所能在Google上搜索這個問題,但它已經失敗了我。

任何猜測爲什麼這不起作用將是驚人的! :)

回答

0

由於JarEntry延伸ZipEntry,我會建議不要依靠ZipEntry.getSize()方法,因爲它返回-1。請參閱doc

此外,讀取流時利用緩衝通常更爲常見。在你的例子中,你把所有的東西都放在你的字節數組中,所以我想大文件可能會在OutOfMemoryError中結束。

這裏是我的代碼將測試:

public static void writeFile(String theFileName, String theFilePath) 
{ 
    try { 
     File currentFile = new File("plugins/mcMMO/Resources/"+theFilePath+theFileName); 
     @SuppressWarnings("static-access") 
     JarFile jar = new JarFile(plugin.mcmmo); 
     JarEntry entry = jar.getJarEntry("resources/"+theFileName); 
     InputStream is = jar.getInputStream(entry); 
     byte[] buf = new byte[2048]; 
     int nbRead; 
     OutputStream os = new BufferedOutputStream(new FileOutputStream(currentFile)); 
     while((nbRead = is.read(buf)) != -1) { 
      os.write(buf, 0, nbRead); 
     } 
     os.flush(); 
     os.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

工作就像一個魅力 – nossr50