Android: скопируйте RawFile на Sdcard (видео mp4) - PullRequest
5 голосов
/ 30 июля 2010

Что не так в этом коде?
У меня есть Raw-файл в моем проекте (mp4 видеофайл),
, когда я делаю это, а затем я получаю файл из файла SDcard не идентично, поэтому видео не можетбыть загруженным: (
У вас есть другой способ автоматически скопировать необработанный файл на SDCard?
Спасибо

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

Ответы [ 3 ]

9 голосов
/ 30 июля 2010

Если вы используете InputStream для чтения, используйте OutputStream для записи, то есть BufferedOutputStream-обернутый FileOutputStream. Кроме того, ваш код довольно неэффективен, поскольку он копирует только один байт за раз. Я бы предложил создать буфер байтового массива и использовать следующие подходящие методы чтения / записи:

int BufferedInputStream.read(byte[] buffer, int offset, int length)
void BufferedOutputStream.write(byte[] buffer, int offset, int length)
7 голосов
/ 30 июля 2010

Работает, спасибо

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();
2 голосов
/ 30 июля 2010

Я думаю, что вы должны очистить, прежде чем закрыть поток

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