안드로이드 배포시 대용량 파일(1Mbyte이상) 배포 방법

assets폴더에 파일을넣어 배포 할수 있으나 1Mbyte이상은 배포가 되지 않고 지워진다. 해결방법은 1Myte단위로 파일을 쪼갠후 프로그램 최초 실행시 하나의 파일로 합한다.

파일쪼개기(1Mbyte단위)

try
{
FileInputStream fis = new FileInputStream(“원본파일 위치”);

    BufferedInputStream bis = new BufferedInputStream(fis);


    FileOutputStream fos = new FileOutputStream("잘릴파일 첫위치");;

    BufferedOutputStream bos = new BufferedOutputStream(fos);;


    byte[] b = new byte[1024];
    int read = -1;
    int count = 1;
    int count2 = 1;

    while((read = bis.read(b, 0, 1024)) != -1)
    {

    bos.write(b, 0, read);
    bos.flush();

    if(count2 % 900 == 0)

    {

     count++;



    if(fos != null) fos.close();

    if(bos != null) bos.close();



    fos = new FileOutputStream("잘릴파일명" + count + ".확장자");

    bos = new BufferedOutputStream(fos);

    }



    count2++;

    }



    fis.close();

    bis.close();

    if(fos != null) fos.close();

    if(bos != null) bos.close();
    }

    catch(Exception e)
    {
        Log.d("ERR", e.getMessage());
    }

프로그램 실행시 파일 합치기

AssetManager am = null;

    InputStream[] arrIs = new InputStream[4]; 
    BufferedInputStream[] arrBis = new BufferedInputStream[4]; // 쪼개진 파일 갯수



    FileOutputStream fos = null;

    BufferedOutputStream bos = null;



    try
    {


    am = this.getResources().getAssets();


    for(int i = 0; i < arrIs.length; i++)

    {

    arrIs[i] = am.open("잘린파일명" + (i + 1) + ".확장자");

    arrBis[i] = new BufferedInputStream(arrIs[i]);

    }



    fos = new FileOutputStream(f);

    bos = new BufferedOutputStream(fos);



    int read = -1;

    byte[] buffer = new byte[1024];



    for(int i = 0; i < arrIs.length; i++)

    {

    while((read = arrBis[i].read(buffer, 0, 1024)) != -1)

    {

    bos.write(buffer, 0, read);

    }



    bos.flush();

    }

    }

    catch(Exception e){}

    finally

    {

    for(int i = 0; i < arrIs.length; i++)

    {

    try{if(arrIs[i] != null) arrIs[i].close();}catch(Exception e){}

    try{if(arrBis[i] != null) arrBis[i].close();}catch(Exception e){}

    }



    try{if(fos != null) fos.close();}catch(Exception e){}

    try{if(bos != null) bos.close();}catch(Exception e){}



    arrIs = null;

    arrBis = null;

    }

    }

댓글 남기기