실제 내가 개발한 어플에 사용된 코드이다.
원래 인터넷 상에 돌아다니던 코드를, 보다 간결하고 명확하게 바로잡았다.
AssetManager assetManager = null; InputStream[] inputStream = new InputStream[7]; //7개로 분할된 원본 파일 BufferedInputStream[] bufferedInputStream = new BufferedInputStream[7]; //7개로 분할된 원본 파일 BufferedOutputStream bufferedOutputStream = null; try { //폴더 생성. 이미 존재하는 경우 알아서 무시됨. new File("/testFolder").mkdir(); //첫 번째 파일 출력 스트림 설정 bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File("/testFolder/testFile1"))); //AssetManager에서 파일을 가져온다. assetManager = Main.getResources().getAssets(); int read = -1; byte[] buffer = new byte[1024]; for(int i = 0; i < inputStream.length; i++) { inputStream[i] = assetManager.open("krv.00" + (i + 1)); //분할된 krv.001 ~ krv.007 bufferedInputStream[i] = new BufferedInputStream(inputStream[i]); while((read = bufferedInputStream[i].read(buffer, 0, 1024)) != -1) { bufferedOutputStream.write(buffer, 0, read); } bufferedOutputStream.flush(); } //두 번째 파일 출력 스트림 설정 bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File("/testFolder/testFile2"))); for(int i = 0; i < inputStream.length; i++) { inputStream[i] = assetManager.open("kjv.00" + (i + 1)); //분할된 kjv.001 ~ kjv.007 bufferedInputStream[i] = new BufferedInputStream(inputStream[i]); while((read = bufferedInputStream[i].read(buffer, 0, 1024)) != -1) { bufferedOutputStream.write(buffer, 0, read); } bufferedOutputStream.flush(); } } catch(Exception e) { Toast.makeText(this, "error!!!", Toast.LENGTH_SHORT).show(); } finally { for(int i = 0; i < inputStream.length; i++) { try{if(inputStream[i] != null) inputStream[i].close();} catch(Exception e){} try{if(bufferedInputStream[i] != null) bufferedInputStream[i].close();} catch(Exception e){} } try{if(bufferedOutputStream != null) bufferedOutputStream.close();} catch(Exception e){} inputStream = null; bufferedInputStream = null; }