2010-07-30 15 views
5

Bu kodda sorun mu var?
Projemde (mp4 videofile), bir Ham dosya ettik
bunu yapmak ve video yükleme :(
Eğer başka bir yol var mı olamaz bu yüzden o zaman ben sdcard dosyasından dosya Retreive aynı olmadığı zaman, otomatik Sd karta ham dosyayı kopyalamak?
TeşekkürAndroid: RawFile öğesini Sdcard'a kopyala (video 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(); 
} 

cevap

9

kapatmadan önce size okumak için bir InputStream kullanırsanız, bir OutputStream kullanmak temizlemek gerektiğini düşünüyorum bir BufferedOutputStream-sarılmış FileOutputStream yazın. Ayrıca, kodunuz bir seferde yalnızca bir bayt kopyalarken oldukça verimsizdir. Bir bayt dizisi tampon oluşturma ve bu, ilgili okuma/yazma yöntemleri kullanılarak öneririm: Docs göre

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

Softam'ın notuna göre, ekstra bir flush() gerekebilir - kesinlikle BufferedOutputStream –

2

sana akıntısı

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

, BufferedWriter.close() otomatik olarak temizler. BufferedOutputStream için durum böyle olmasa da (yine, belgelere göre). –

+0

Aha, bilgi için teşekkürler! – softarn

7

Çalışıyor, teşekkür

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

durumunda Çalışma kodunu gönderdiğiniz için teşekkürler! –

İlgili konular