본문 바로가기

Linux/Android

안드로이드 assets 에 관하여

리소스 형식이 아닌 일반 파일에 접근할때는 assets폴더에 화일을 넣고 접근을 하게 되는데..

접근 하는 방식은 다음과 같다.

//assets폴더의  파일을 링크 할때..

//URL로드-- 아래는 로컬 파일 로드
        mWebView.loadUrl("file:///android_asset/img.html");

 

//assets화일에  접근할때

getApplicationContext().getAssets();


AssetManager를 이용한 assets 폴더 접근.




위 그림 처럼 assets하위에 폴더를 두고 접근을 하고 싶다면 아래와 같이 하면 된다. 


?
1
2
AssetManager am = getResources().getAssets();
InputStream is = am.open("jan/"+(<b>filename</b>));

 



assets 폴더에 있는 파일 전체 sdcard에 복사
 

//퍼미션 중요

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

private void CopyAssets() {
     AssetManager assetManager = getAssets();
     String[] files = null;
     String mkdir = null ;
     try {
         files = assetManager.list("");

        //이미지만 가져올때 files = assetManager.list("image");

     } catch (IOException e) {
         Log.e("tag", e.getMessage());
     }
     for(int i=0; i<files.length; i++) {
         InputStream in = null;
         OutputStream out = null;
         try {
           in = assetManager.open(files[i]);
          
           //폴더생성
           String str = Environment.getExternalStorageState();
           if ( str.equals(Environment.MEDIA_MOUNTED)) {
         mkdir = "/sdcard/elecgal/templet/" ;
         } else {
          Environment.getExternalStorageDirectory();
         }
         File mpath = new File(mkdir);
         if(! mpath.isDirectory()) {
          mpath.mkdirs();
         }
           //
         
           out = new FileOutputStream("/sdcard/elecgal/templet/" + files[i]);
           copyFile(in, out);
           in.close();
           in = null;
           out.flush();
           out.close();
           out = null;
         } catch(Exception e) {
             Log.e("tag", e.getMessage());
         }      
     }
 }
 private void copyFile(InputStream in, OutputStream out) throws IOException {
     byte[] buffer = new byte[1024];
     int read;
     while((read = in.read(buffer)) != -1){
       out.write(buffer, 0, read);
     }

 }