2010-07-30 36 views
5

Có gì sai trên mã này?
Tôi có tệp thô trong dự án của mình (mp4 videofile),
khi tôi thực hiện việc này và sau đó tôi truy xuất tệp từ tệp SDcard không giống nhau để không thể tải video: (
Bạn có cách khác không automaticly sao chép một tập tin thô sdcard?
Cảm ơnAndroid: Sao chép RawFile sang Sdcard (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(); 
} 

Trả lời

9

Nếu bạn sử dụng một InputStream để đọc, sử dụng một OutputStream để viết, tức là tệp FileOutputStream được gói BufferedOutputStream. Ngoài ra, mã của bạn là khá kém hiệu quả, vì nó chỉ sao chép một byte tại một thời điểm. Tôi muốn khuyên bạn nên tạo một bộ đệm mảng byte và sử dụng những phương pháp đọc/ghi liên quan:

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

Theo ghi chú của softam, bạn có thể cần thêm flush() - chắc chắn trong trường hợp của BufferedOutputStream –

2

tôi nghĩ bạn nên tuôn trước khi bạn đóng dòng

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

Theo các tài liệu, BufferedWriter.close() tự động xả. Không phải là trường hợp cho BufferedOutputStream mặc dù (một lần nữa, theo các tài liệu). –

+0

Aha, cảm ơn thông tin! – softarn

7

Nó hoạt động, nhờ

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

Cảm ơn bạn đã đăng mã làm việc! –

Các vấn đề liên quan