Как получить все файлы из папки активов - PullRequest
14 голосов
/ 03 декабря 2011

Я пытаюсь получить все изображения в папке с активами, используя коды ниже

private List<String> getImage()
      {
        /* 设定目前所在路径 */
        List<String> it=new ArrayList<String>();      
        File f=new File("file:///android_asset/");  
        File[] files=f.listFiles();
        Log.d("tag", "读取asset资源");

        /* 将所有文件存入ArrayList中 */
        for(int i=0;i<files.length;i++)
        {
          File file=files[i];
          if(getImageFile(file.getPath()))
            it.add(file.getPath());
        }
        return it;

      }

      private boolean getImageFile(String fName)
      {
        boolean re;

        /* 取得扩展名 */
        String end=fName.substring(fName.lastIndexOf(".")+1,
                      fName.length()).toLowerCase(); 

        /* 按扩展名的类型决定MimeType */
        if(end.equals("jpg")||end.equals("gif")||end.equals("png")
                ||end.equals("jpeg")||end.equals("bmp"))
        {
          re=true;
        }
        else
        {
          re=false;
        }
        return re; 
      }

почему-то я не уверен в этом выражении

File f=new File("file:///android_asset/"); 

Хорошо, я знаю, что при чтении txt-файла или html-файла из папки assets вы можете использовать это, но могут ли изображения это принять?

Я решил эту проблему с помощью кода ниже

private List<String> getImage() throws IOException
      {
        AssetManager assetManager = getAssets();
        String[] files = assetManager.list("image");   
        List<String> it=Arrays.asList(files);
        return it; 

        }

на случай, если кто-то еще захочет узнать

1 Ответ

11 голосов
/ 03 декабря 2011

В общем, вы можете использовать AssetManager для управления файлами в вашей папке активов.В упражнении вызовите метод getAssets () , чтобы получить экземпляр AssetManager.

РЕДАКТИРОВАТЬ: вы можете использовать AssetManager для чтения таких изображений:

AssetManager am=this.getAssets();
        try {
            Bitmap bmp=BitmapFactory.decodeStream(am.open("009.gif"));
            chosenImageView.setImageBitmap(bmp);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

Примечаниечто метод BitmapFactory.decodeStream() по умолчанию выполняется в потоке пользовательского интерфейса, поэтому приложение может застрять, если изображение слишком велико.В этом случае вы можете изменить размер сэмпла или начать новый поток, чтобы сделать это.

...