繁体   English   中英

Android:将RawFile复制到SD卡(视频mp4)

[英]Android : Copy RawFile to Sdcard (video mp4)

这段代码有什么问题?
我的项目中有一个Raw文件(mp4 videofile),
当我这样做,然后我从SDcard文件retreive文件不相同所以视频无法加载:(
你有另一种方法可以自动将原始文件复制到SD卡吗?
谢谢

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();
}

如果使用InputStream进行读取,请使用OutputStream进行写入,即使用BufferedOutputStream包装的FileOutputStream。 此外,您的代码效率很低,因为它一次只复制一个字节。 我建议创建一个字节数组缓冲区并使用这些相关的读/写方法:

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

它有效,谢谢

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();

我认为你应该在关闭流之前刷新

bufEcrivain.flush();
bufEcrivain.close();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM