Problem: How to read files (Images or text files) from Assets folder?
Description:
I assume you are aware about File reading operation, but here we have question that how can we get a list of files which we have placed in Assets folder. Here AssetManager class can help you to access any files lying inside the Assets directory of android application ( (or any sub-folders inside the Assets directory).
For accessing files from Assets directory, you require object of the AssetManager class, which you can create by using getAssets() method:
1 | AssetManager assetManager = getAssets(); |
Now, you can get the files by using list(String Path) method of AssetManager class:
1 2 | String[] files = assetManager.list( "" ); // files from 'assets' directory String[] files = assetManager.list( "Files" ); // files from 'assets/Files' directory |
And go through example for the rest of the procedure. In the example, you can find code for fetching files name and displaying it, reading text file, open image file and creating drawable from it and displaying the same in ImageView.
Solution:
ReadFileAssetsActivity.java
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | package com.paresh.readfileasset; import java.io.IOException; import java.io.InputStream; import android.app.Activity; import android.content.res.AssetManager; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.widget.ImageView; import android.widget.TextView; /** * @author Paresh N. Mayani * @Website https://technotalkative.com */ public class ReadFileAssetsActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); TextView txtContent = (TextView) findViewById(R.id.txtContent); TextView txtFileName = (TextView) findViewById(R.id.txtFileName); ImageView imgAssets = (ImageView) findViewById(R.id.imgAssets); AssetManager assetManager = getAssets(); // To get names of all files inside the "Files" folder try { String[] files = assetManager.list( "Files" ); for ( int i= 0 ; i<files.length; i++) { txtFileName.append( "\n File :" +i+ " Name => " +files[i]); } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // To load text file InputStream input; try { input = assetManager.open( "helloworld.txt" ); int size = input.available(); byte [] buffer = new byte [size]; input.read(buffer); input.close(); // byte buffer into a string String text = new String(buffer); txtContent.setText(text); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // To load image try { // get input stream InputStream ims = assetManager.open( "android_logo_small.jpg" ); // create drawable from stream Drawable d = Drawable.createFromStream(ims, null ); // set the drawable to imageview imgAssets.setImageDrawable(d); } catch (IOException ex) { return ; } } } |
main.xml
01 02 03 04 05 06 07 08 09 10 11 12 | <? xml version = "1.0" encoding = "utf-8" ?> < ScrollView xmlns:android = "http://schemas.android.com/apk/res/android" android:layout_width = "fill_parent" android:layout_height = "fill_parent" > < LinearLayout android:layout_width = "fill_parent" android:layout_height = "fill_parent" android:orientation = "vertical" > < TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:text = "@string/hello" android:id = "@+id/txtContent" > < ImageView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:id = "@+id/imgAssets" > < TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:id = "@+id/txtFileName" > </ TextView ></ ImageView ></ TextView ></ LinearLayout > </ Scrollview > |
Download example: https://github.com/PareshMayani/Android-ReadFileAssets