5

このコードのどこが間違っていますか?
プロジェクトにRawファイル(mp4
ビデオファイル)がありますが、これを行うと、SDカードからファイルを取得すると、ファイルが同一ではないため、ビデオをロードできません:(
生ファイルを自動的にコピーする別の方法はありますか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();
}
4

3 に答える 3

9

InputStream を使用して読み取る場合は、OutputStream を使用して書き込みます。つまり、BufferedOutputStream でラップされた FileOutputStream です。また、一度に 1 バイトしかコピーしないため、コードはかなり非効率的です。バイト配列バッファーを作成し、これらの関連する読み取り/書き込みメソッドを使用することをお勧めします。

int BufferedInputStream.read(byte[] buffer, int offset, int length)
void BufferedOutputStream.write(byte[] buffer, int offset, int length)
于 2010-07-30T01:03:18.120 に答える
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();
于 2010-07-30T08:50:58.413 に答える
2

ストリームを閉じる前にフラッシュする必要があると思います

bufEcrivain.flush();
bufEcrivain.close();
于 2010-07-30T00:57:04.807 に答える