Android 读取 raw 和 assets 目录
大家应该对 raw
和 assets
两个文件夹不陌生吧,如果我们不想自己的文件被编译成二进制文件的话,
我们可以把文件放到这两个目录下
目录 | 说明 |
---|---|
res/raw | 文件会被映射到 R.java 文件中,访问的时候直接通过资源 ID 即可访问,但它不能有目录结构,就是不能再创建文件夹 |
assets | 不会映射到 R.java 文件中,通过 AssetManager 来访问,能有目录结构,即可以自行创建文件夹 |
读取文件资源
res/raw
InputStream is = getResources().openRawResource(R.raw.filename);
assets
AssetManager am = getAssets(); InputStream is = am.open("filename");
范例
-
创建一个 空的 Android 项目
cn.twle.android.ReadAssets
-
在
app
上点右键,选择NEW -> Folder-> Assets Folder
创建assets
目录 -
在
res
目录下添加(创建)raw
资源目录 -
在
app/assets
目录下新建文件site.txt
并输入一下内容简单教程的网址是:https://www.twle.cn
-
在
res/raw
目录下新建文件slogan.txt
并输入一下内容简单教程的 slogan 是: 简单教程,简单编程
-
修改
activity_main.xml
添加两个TextView
<?xml version="1.0" encoding="utf-8" ?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/ms_site_url" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/ms_slogan" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
-
修改
MainActivity.java
读取site.txt
和slogan.txt
并显示package cn.twle.android.readassets; import android.content.res.AssetManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.TextView; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView ms_site_url = findViewById(R.id.ms_site_url); TextView ms_slogan = findViewById(R.id.ms_slogan); try { InputStream is = getResources().openRawResource(R.raw.slogan); BufferedReader in = new BufferedReader(new InputStreamReader(is,"UTF-8")); ms_slogan.setText(in.readLine()); is.close(); in.close(); AssetManager am = getAssets(); is = am.open("site.txt"); in = new BufferedReader(new InputStreamReader(is,"UTF-8")); ms_site_url.setText(in.readLine()); is.close(); in.close(); }catch (IOException e){} } }