Как получить все файлы из папки с ресурсами

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

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-файла из папки с ресурсами вы можете использовать это, но будут ли изображения также принимать это?

Я решил эту проблему, используя приведенный ниже код

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

        }

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


person oratis    schedule 03.12.2011    source источник
comment
+1 за публикацию вашего решения, спасибо   -  person Guillaume    schedule 03.12.2011
comment
+1, само решение, опубликованное в этом вопросе, работает.   -  person Rat-a-tat-a-tat Ratatouille    schedule 31.03.2014


Ответы (1)


Как правило, вы можете использовать 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() по умолчанию запускается в потоке пользовательского интерфейса, поэтому приложение зависнет, если изображение будет слишком большим. В этом случае вы можете изменить размер выборки или создать для этого новый поток.

person Huang    schedule 03.12.2011
comment
ну, я использовал Log.d(tag, get assets +it); для регистрации, если файлы в папке ресурсов были прочитаны, и logcat print 12-03 14:01:38.780: DEBUG/tag(495): get assets[] Я думаю, что что-то не так с методом, который я получаю, я получаю этот файл, какие-либо советы ? спасибо - person oratis; 03.12.2011
comment
На самом деле, я всегда использую AssetManager, чтобы получить доступ к файлу внутри папки ресурсов. Я помню, что Uri для файлов в папке с ресурсами — это file:///android_asset/, но я не использую и не тестирую его. Кроме того, ваши изображения находятся в подкаталоге, таком как /asset/img? - person Huang; 03.12.2011
comment
Нет, причина, по которой я поместил все файлы в List‹String› из папки с ресурсами и проверил тип mime, заключается в том, что я не хотел использовать определенную папку для файлов изображений, ну, на этом сайте редко можно найти китайский язык, я из Пекина, у вас есть учетная запись QQ, может быть, мы сможем поговорить там, более удобно. - person oratis; 03.12.2011
comment
Здесь я нахожу, что вы можете ошибаться. См. этот пост stackoverflow.com/questions/4879416/. Вы должны использовать AssetManager для чтения этих файлов. - person Huang; 03.12.2011
comment
Я просто тестирую File img=new File("file:///android_asset/"); Log.i("INFO", ""+img.listFiles().length+"");, он выдает исключение NullPointer. - person Huang; 03.12.2011
comment
У меня тоже, может быть, я сначала сохраню файлы на SD-карте, а затем прочитаю, спасибо, чувак - person oratis; 03.12.2011
comment
давайте продолжим это обсуждение в чате - person Huang; 03.12.2011
comment
Эээ, почему-то я не могу подключиться к серверу чата, извините - person oratis; 03.12.2011
comment
Я погуглил и нашел файлы = this.getResources().getAssets().list(assetDir); Я думаю, что это сделает это, тестирование - person oratis; 03.12.2011
comment
Это нормально. Мне нравится учиться на этом сайте. Мы обязательно встретимся снова. AssetManager также имеет такую ​​функцию для отображения файлов в каталоге. Пожалуйста, прочтите документ разработчика. В большинстве случаев это хороший ресурс для решения вашей проблемы. - person Huang; 03.12.2011
comment
Есть ли способ получить имена папок, которые находятся в папке с ресурсами? - person JCarlosR; 08.02.2017
comment
Используя пустую строку, можно получить имена папок в активах (но будьте осторожны, потому что это добавляет 3 дополнительные папки: изображения, звуки и вебкит). - person JCarlosR; 08.02.2017