2010-07-30 4 views
5

이 코드의 잘못된 점은 무엇입니까?
내 프로젝트 (mp4 비디오 파일)에 RAW 파일이 있는데
이렇게하면 SDcard 파일의 파일이 일치하지 않아 비디오를로드 할 수 없게됩니다. (
다른 방법이 있습니까? 를 automaticly sdcard에하는 원시 파일을 복사?
감사Android : RawFile을 Sdcard로 복사하십시오 (동영상 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(); 
} 

답변

9

을 닫기 전에 당신이 읽을 InputStream를 사용하는 경우에 OutputStream를 사용하여 세척해야한다고 생각 write, 즉, BufferedOutputStream에 랩 된 FileOutputStream 또한 코드는 한 번에 한 바이트 만 복사하기 때문에 비효율적입니다. 내가 바이트 배열 버퍼를 생성하고이 관련 읽기/쓰기 방법을 사용하는 것이 좋습니다 것 : 워드 프로세서에 따르면

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

Softam의 설명에 따르면, BufferedOutputStream의 경우에는 별도의 flush()가 필요할 수도 있습니다. –

2

을 당신이 스트림을

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

, BufferedWriter.close()가 자동으로 플러시합니다. BufferedOutputStream의 경우는 아니지만 (다시, 문서에 따르면). –

+0

아하, 정보 주셔서 감사합니다! – softarn

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

작동 코드를 게시 해 주셔서 감사합니다! –

관련 문제