android读取Resources中内容

android中资源是只读的,不可写。

下面我们来读取Assets目录和res/raw目录下的文本文件到TextView中,首先要做的就是将文件放入到这两个文件夹里

在activity_main.xml中放入两个TextView来显示文本内容

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.ssln.fileresources.MainActivity" >

    <TextView
        android:id="@+id/tvRaw"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
       />

    <TextView
        android:id="@+id/tvAssets"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

</LinearLayout>

然后在mainactivity.java中封装了2个方法,分别读取两个目录下的内容,一种是获取内容大小,然后直接读取到缓冲区,另外一种是逐行读取文件内容

package com.ssln.fileresources;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.util.EncodingUtils;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    private final String Encoding = "utf-8"; // 文件编码
    private final String fileName = "text.txt"; // 文件名

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tvAssets = (TextView) findViewById(R.id.tvAssets);
        TextView tvRaw = (TextView) findViewById(R.id.tvRaw);

        tvAssets.setText(ReadFromAssets());

        tvRaw.setText(ReadFromRaw());
    }

    /**
     * 读取Assets目录下的文件
     *
     * @return
     */
    private String ReadFromAssets() {
        String retStr = "";
        try {
            // 打开文件到流
            InputStream inStream = getResources().getAssets().open(fileName);
            // 获取长度
            int fileLen = inStream.available();
            // 放入缓冲区
            byte[] buffer = new byte[fileLen];
            inStream.read(buffer);
            // 转码到文本
            retStr = EncodingUtils.getString(buffer, Encoding);
            //关闭
            inStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return retStr;

    }

    /**
     * 读取Raw目录下文件
     *
     * @return
     */
    private String ReadFromRaw() {
        String retStr="";
        try
        {
            InputStream inStream=getResources().openRawResource(R.raw.text);
            //这里我们使用另外一种读取方法,逐行读取内容
            BufferedReader br=new BufferedReader(new InputStreamReader(inStream));
            String tempStr="";
            while((tempStr=br.readLine())!=null)
            {
                retStr+=tempStr+"\r\n";
                Toast.makeText(this, tempStr, Toast.LENGTH_SHORT).show();
            }
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        return retStr;

    }
}

我们看下效果

??? 为毛是乱码尼?因为我们在上面读取的编码方式是utf-8的

private final String Encoding = "utf-8"; // 文件编码

retStr = EncodingUtils.getString(buffer, Encoding);

肿么办?我们从新用记事本来存储下文件为utf-8就好了

在来看看效果

时间: 10-05

android读取Resources中内容的相关文章

android读取apk中已经存在的数据库信息

在android数据库编程方面,大家有没有遇到过,我要从指定位置的已经存在的数据库来进行操作的问题.之前我尝试了很多方法都没有成功,后来找到了解决的方法.   下面说明下这段代码的意思,第一步先判断在指定的路劲是否存在,不存在就创建设计素材大全.第二步将android的资源下的数据库复制到指定路径下面.第三步就是根据指定路径打开或者创建数据库,然后得到操作数据库的对象,得到操作数据库的对象了,自然就可以对数据库中的表进行增删改查等操作了. 1. [代码]android程序读取项目中已经存在的数据

android 读取txt文件内容

Android的res文件夹是用来存储资源的,可以在res文件夹下建立一个raw文件夹,放置在raw文件夹下的内容会被原样打包,而不会被编译成二进制文件,并且可以通过R文件进行很方便地访问. 比如我们可以将更新信息.版权信息等放到txt文件中,然后放到raw文件中,然后很方便地进行访问. 在raw中放入一个a.txt文件,然后就可以在Activity中使用getResources().openRawResource(R.raw.a);方法获取一个此文件的InputStream类,而后就可以很方便

Android 读取Assets中图片

bgimg0 = getImageFromAssetsFile("Cat_Blink/cat_blink0000.png"); * * 从Assets中读取图片 */ private Bitmap getImageFromAssetsFile(String fileName) { Bitmap image = null; AssetManager am = getResources().getAssets(); try { InputStream is = am.open(fileNa

Android读取Assets文件夹中的内容

Android读取Assets文件夹中的内容 assets文件夹是android程序中存放相关外部文件的一个目录,Android官方提供了相应的方法去访问该文件夹中的内容,故此我们并不需要进行相关的路径判断等代码操作,直接调用相关方法打开文件并得到一个字节输入流(InputStream):然后通过相应的字符编码方式读取字节解码为字符输入流(InputStreamReader):再通过BufferReader对字符输入流读取文本并将字符存入缓冲区以便能提供字符.数组和线段的高效读取:最后我们就能逐

Android 中内容提供者的使用

在Android中内容提供者主要是用于不同程序之间的数据共享.内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序的数据,另一种是创建自己的内容提供器,供其他的程序访问. 使用现有的内容提供器来读取和操作相应程序的数据 ContentResolve中提供了一系列的方法用于对数据进行增删改查的操作,其中,insert()用于添加数据,update()用于数据更新,delete()方法用于删除数据,query()用于数据的查询. 在ContentResolve中,使用内容URI

五种方式让你在java中读取properties文件内容不再是难题

一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC+Mybatis整合开发的项目中通过java程序读取properties文件内容的方式进行了梳理和分析,先和大家共享. 二.项目环境介绍 Spring 4.2.6.RELEASE SpringMvc 4.2.6.RELEASE Mybatis 3.2.8 Maven 3.3.9 Jdk 1.7 Id

Android中内容提供者ContentProvider实现数据库增删改查

1.我们首先new一个我们自己的类集成ContentProvider,并实现方法如下 package com.wzw.sqllitedemo.providers; import com.wzw.sqllitedemo.db.PersonSQLiteOpenHelper; import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues;

读取memo中某行内容

方法1 可用以下代码读取Memo中指定行的内容: var   aLine:String; begin   aLine:=Memo1.Lines[2]; end; 在使用中,读取的行在Memo中需要保证是存在的,否则会导致异常. 对于数组Lines的索引取值范围为0-Memo1.Lines.Count; 如果超过此范围,取得的数据为空. 方法2: ShowMessage(Memo1.Lines.Strings[1]);

Android中内容观察者的使用---- ContentObserver类详解

  转载请注明出处:http://blog.csdn.net/qinjuning 前言: 工作中,需要开启一个线程大量的查询某个数据库值发送了变化,导致的开销很大,后来在老大的指点下,利用了 ContentObserver完美的解决了该问题,感到很兴奋,做完之后自己也对ContentObserver做下总结. ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理,它类似于 数据库技术中的触发器(Trigger),当ContentObs