第一个小应用:图片浏览器 之二 学会Assets、raw中的文件的读取
2016-03-13 01:35
489 查看
先来大概看看Assets在Android stuido中怎么创建的吧:
右键app >> new >> Folder >> Assets Folder 起个名字,然后下一步下一步
Android应用除了res目录用于存放资源外,assets目录也用于存放资源,一般来说,assets目录存放的资源代表应用无法直接访问的原生资源,应用需要通过AssetManager以二进制的形式来读取资源。而res目录下的资源,SDK会在编译该应用的时候自动在R.java文件中为这些资源创建索引,程序可以通过R资源清单类进行访问。
访问assests: getResources().getAssets().open(FILE_NAME);
访问res:比如:setContentView(R.layout.activity_main);
关于raw的文件读取:
getResources().openRawResource(R.id.raw下的文件名) 它的操作数据的方法可以参考下面的代码
准备工作:
在 assets 目录中创建一个文件 名字叫 ”Info“
里面贴上几行文字
主布局界面里面是:一个Button按钮,一个textView,当启动Button的时候,我们把 Info文件中的信息读取到 textView中
布局页面:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.wang.myassets.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="hello"
android:id="@+id/tvInfo"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="把信息输入到上面的view中"
android:id="@+id/btnInputInfo"
android:layout_below="@+id/tvInfo"/>
</RelativeLayout>
MainActivity.java
package com.wang.myassets;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
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 {
private TextView tvInfo;
public static final String FILE_NAME = "Info";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvInfo = (TextView) findViewById(R.id.tvInfo);
findViewById(R.id.btnInputInfo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
InputStream is = getResources().getAssets().open(FILE_NAME);
//InputStream 返回的是字节流,当读取的是文本文件时,需要把字节流包装成字符流
//需要注意的是,一定要加上编码方式,防止出现乱码
InputStreamReader isr = new InputStreamReader(is,"UTF-8");
//接着封装成BufferedReader 它是一个缓冲区,可以通过 readLine()来获取一行
BufferedReader bfr = new BufferedReader(isr);
String in = "";
StringBuilder builder = new StringBuilder();
while ((in = bfr.readLine()) != null){
//每读一行文字,就把这行文字放到builder中
builder.append(in);
//因为readLine()不会读换行符,所以,每次都添加一个换行保持格式
builder.append("\n");
}
tvInfo.setText(builder);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
右键app >> new >> Folder >> Assets Folder 起个名字,然后下一步下一步
Android应用除了res目录用于存放资源外,assets目录也用于存放资源,一般来说,assets目录存放的资源代表应用无法直接访问的原生资源,应用需要通过AssetManager以二进制的形式来读取资源。而res目录下的资源,SDK会在编译该应用的时候自动在R.java文件中为这些资源创建索引,程序可以通过R资源清单类进行访问。
访问assests: getResources().getAssets().open(FILE_NAME);
访问res:比如:setContentView(R.layout.activity_main);
关于raw的文件读取:
getResources().openRawResource(R.id.raw下的文件名) 它的操作数据的方法可以参考下面的代码
准备工作:
在 assets 目录中创建一个文件 名字叫 ”Info“
里面贴上几行文字
主布局界面里面是:一个Button按钮,一个textView,当启动Button的时候,我们把 Info文件中的信息读取到 textView中
布局页面:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.wang.myassets.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="hello"
android:id="@+id/tvInfo"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="把信息输入到上面的view中"
android:id="@+id/btnInputInfo"
android:layout_below="@+id/tvInfo"/>
</RelativeLayout>
MainActivity.java
package com.wang.myassets;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
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 {
private TextView tvInfo;
public static final String FILE_NAME = "Info";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvInfo = (TextView) findViewById(R.id.tvInfo);
findViewById(R.id.btnInputInfo).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
InputStream is = getResources().getAssets().open(FILE_NAME);
//InputStream 返回的是字节流,当读取的是文本文件时,需要把字节流包装成字符流
//需要注意的是,一定要加上编码方式,防止出现乱码
InputStreamReader isr = new InputStreamReader(is,"UTF-8");
//接着封装成BufferedReader 它是一个缓冲区,可以通过 readLine()来获取一行
BufferedReader bfr = new BufferedReader(isr);
String in = "";
StringBuilder builder = new StringBuilder();
while ((in = bfr.readLine()) != null){
//每读一行文字,就把这行文字放到builder中
builder.append(in);
//因为readLine()不会读换行符,所以,每次都添加一个换行保持格式
builder.append("\n");
}
tvInfo.setText(builder);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
相关文章推荐
- java反射基本使用操作
- Mat类
- 开发笔记-UIApplication单例
- 设计模式——之代理模式(proxy)
- 矩阵掩模操作
- 薛老师软考高项学员:2016年3月9日作业
- 110. Balanced Binary Tree
- 如何使用OPENCV实现两张图片的混合(PS中的图层不透明度)
- Android中Activity启动模式详解
- 选什么时候验光效果最好?
- CodeForces 628D Magic Numbers(数位DP)
- Android_自动安装APK
- git使用记录
- javascript权威指南学习笔记1
- 【NOIP2012提高组】国王游戏
- 删除一个表中所有含重复字段的数据
- asp.net实现动态添加table行
- Activity四种启动模式
- python - 抓取页面上的链接
- css3动画,阴影,加快页面加载,块级模式的小总结