2010-07-30 26 views
5

此代碼有什麼問題?
我在我的項目(MP4視頻文件),
原始文件,當我這樣做,然後我從SDcard文件retreive文件不相同,因此視頻無法加載:(
你有另一種方式全自動複製原始文件到SD卡?
感謝Android:將RawFile複製到SD卡(視頻MP4)

String FICHIER_BLOW = "blowvid4.mp4"; 
File f=new File(Environment.getExternalStorageDirectory(), FICHIER_BLOW); 
try { 
    if (f.createNewFile()){ 
    FileWriter ecrivain = new FileWriter(f); 
    BufferedWriter bufEcrivain = new BufferedWriter(ecrivain); 
    BufferedInputStream VideoReader = new BufferedInputStream(getResources().openRawResource(R.raw.blow)); 
    while(VideoReader.available() > 0){ 
     bufEcrivain.write(VideoReader.read()); 
    } 
    bufEcrivain.close(); 

    VideoView videoView = (VideoView) findViewById(R.id.VideoView); 
    MediaController mediaController = new MediaController(this); 
    mediaController.setAnchorView(videoView); 
    video =Uri.fromFile(f); 
    videoView.setMediaController(mediaController); 
    videoView.setVideoURI(video); 
    videoView.start(); 
    } 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

回答

9

之前,如果你使用一個InputStream來讀取,使用一個OutputStream來寫入,即BufferedOutputStream包裝的FileOutputStream。而且,你的代碼效率很低,因爲它一次只複製一個字節。我建議創建一個字節數組緩衝區,並使用這些相關的讀/寫方法:

int BufferedInputStream.read(byte[] buffer, int offset, int length) 
void BufferedOutputStream.write(byte[] buffer, int offset, int length) 
+2

根據softam的說明,您可能需要額外的flush() - 絕對是在BufferedOutputStream的情況下 – 2010-07-30 01:07:15

2

我想你應該清空您關閉流

bufEcrivain.flush(); 
bufEcrivain.close(); 
+2

根據該文檔,BufferedWriter.close()自動沖洗。雖然不是BufferedOutputStream的情況(再次,根據文檔)。 – 2010-07-30 01:06:24

+0

啊哈,感謝您的信息! – softarn 2010-07-30 01:19:45

7

它的工作原理,感謝

BufferedOutputStream bufEcrivain = new BufferedOutputStream((new FileOutputStream(f))); 
BufferedInputStream VideoReader = new BufferedInputStream(getResources().openRawResource(R.raw.blow)); 
byte[] buff = new byte[32 * 1024]; 
int len; 
while((len = VideoReader.read(buff)) > 0){ 
    bufEcrivain.write(buff,0,len); 
} 
bufEcrivain.flush(); 
bufEcrivain.close(); 
+1

感謝您發佈工作代碼! – 2011-01-04 01:28:23