read file from assets

前端 未结 18 2528
终归单人心
终归单人心 2020-11-21 22:47
public class Utils {
    public static List getMessages() {
        //File file = new File(\"file:///android_asset/helloworld.txt\");
        AssetMan         


        
18条回答
  •  广开言路
    2020-11-21 23:25

    In MainActivity.java

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            TextView tvView = (TextView) findViewById(R.id.tvView);
    
            AssetsReader assetsReader = new AssetsReader(this);
            if(assetsReader.getTxtFile(your_file_title)) != null)
            {
                tvView.setText(assetsReader.getTxtFile(your_file_title)));
            }
        }
    

    Also, you can create separate class that does all the work

    public class AssetsReader implements Readable{
    
        private static final String TAG = "AssetsReader";
    
    
        private AssetManager mAssetManager;
        private Activity mActivity;
    
        public AssetsReader(Activity activity) {
            this.mActivity = activity;
            mAssetManager = mActivity.getAssets();
        }
    
        @Override
        public String getTxtFile(String fileName)
        {
            BufferedReader reader = null;
            InputStream inputStream = null;
            StringBuilder builder = new StringBuilder();
    
            try{
                inputStream = mAssetManager.open(fileName);
                reader = new BufferedReader(new InputStreamReader(inputStream));
    
                String line;
    
                while((line = reader.readLine()) != null)
                {
                    Log.i(TAG, line);
                    builder.append(line);
                    builder.append("\n");
                }
            } catch (IOException ioe){
                ioe.printStackTrace();
            } finally {
    
                if(inputStream != null)
                {
                    try {
                        inputStream.close();
                    } catch (IOException ioe){
                        ioe.printStackTrace();
                    }
                }
    
                if(reader != null)
                {
                    try {
                        reader.close();
                    } catch (IOException ioe)
                    {
                        ioe.printStackTrace();
                    }
                }
            }
            Log.i(TAG, "builder.toString(): " + builder.toString());
            return builder.toString();
        }
    }
    

    In my opinion it's better to create an interface, but it's not neccessary

    public interface Readable {
        /**
         * Reads txt file from assets
         * @param fileName
         * @return string
         */
        String getTxtFile(String fileName);
    }
    

提交回复
热议问题