실제 내가 개발한 어플에 사용된 코드이다.
원래 인터넷 상에 돌아다니던 코드를, 보다 간결하고 명확하게 바로잡았다.
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;
}