assests文件下读取txt文件

本文介绍如何在Android应用中访问Assets文件夹内的资源。通过AssetManager组件以字节流形式读取文件,适用于保持原始文件格式的场景。文章提供示例代码,展示了如何从Assets和Raw文件夹中读取文本文件。
摘要由CSDN通过智能技术生成

assets文件夹资源的访问:

assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。
1. 先在Activity里面调用getAssets() 来获取AssetManager引用。
2. 再用AssetManager的open(String fileName, int accessMode) 方法则指定读取的文件以及访问模式就能得到输入流InputStream。
3. 然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStream.close() 。
4.调用AssetManager.close() 关闭AssetManager。
需要注意的是,来自Resources和Assets 中的文件只可以读取而不能进行写的操作

以下为从Raw文件中读取:(代码)

public String getFromRaw(){ 
            try { 
                InputStreamReader inputReader = new InputStreamReader( getResources().openRawResource(R.raw.test1));
                BufferedReader bufReader = new BufferedReader(inputReader);
                String line="";
                String Result="";
                while((line = bufReader.readLine()) != null)
                    Result += line;
                return Result;
            } catch (Exception e) { 
                e.printStackTrace(); 
            }             
    } 

以下为直接从assets读取:(代码)

public String getFromAssets(String fileName){ 
            try { 
                 InputStreamReader inputReader = new InputStreamReader( getResources().getAssets().open(fileName) ); 
                BufferedReader bufReader = new BufferedReader(inputReader);
                String line="";
                String Result="";
                while((line = bufReader.readLine()) != null)
                    Result += line;
                return Result;
            } catch (Exception e) { 
                e.printStackTrace(); 
            }
    } 

简单点就是:

    //assets目录中的资源需要直接使用文件名来引用,例如asses/xyz.xml、assets/abc/test.db是assets目录中的两个资源文件
     //,其中abc是assets中的子目录,可以使用如下的代码引用这两个资源,并返回与资源对应的inputstream对象

    //第一种方式:直接放在assets目录下
    InputStream  in=getResources().getAssets().open("t1.txt");
    //第二种方式:在assets目录下自定义了新的目录(1的文件夹中t1.txt)
    //InputStream  in=getResources().getAssets().open("1/t1.txt");

下面是自己写的一个小的示例:
这里写图片描述这里写图片描述

xml文件:(只用到了textview)

<LinearLayout 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:orientation="vertical"
    tools:context="com.example.sendmessage.MainActivity" >

    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/sendEdit1"
        android:hint="@string/sendEdit1"
        />

    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/add"
        android:text="@string/add"
        />

    <EditText 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/sendEdit2"
        android:hint="@string/sendEdit2"
        />

    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/send"
        android:text="@string/send"
        />

    <TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/     textview"
        />

</LinearLayout>

activity文件:

package com.example.sendmessage;

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

import org.apache.http.util.EncodingUtils;

import android.app.Activity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    //private EditText sendEdit1,sendEdit2;
    //private Button add,send;

    private TextView textview;
    private String result;//用来接收txt文本

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

        //sendEdit1 = (EditText) findViewById(R.id.sendEdit1);
        //sendEdit2 = (EditText) findViewById(R.id.sendEdit2);

        //add = (Button) findViewById(R.id.add);

        //send = (Button) findViewById(R.id.send);
        //send.setOnClickListener(new SendListener());

        //显示assests下的txt文件
        textview = (TextView) findViewById(R.id.textview);
        textview.setText("text:"+getFromAssets("1.txt"));
    }

    //从assets 文件夹中获取文件并读取数据
    public String getFromAssets(String fileName){
       String result = "";
       try {
            InputStream in = getResources().getAssets().open(fileName);
            //获取文件的字节数
            int lenght = in.available();
            //创建byte数组
            byte[]  buffer = new byte[lenght];
            //将文件中的数据读到byte数组中
            in.read(buffer);
            result = EncodingUtils.getString(buffer, "GBK");
            } catch (Exception e) {
            e.printStackTrace();
            }
            return result;
       }

}

题外话:(因为我实现的时候出现了乱码)

GBK编码:是指中国的中文字符,其它它包含了简体中文与繁体中文字符,另外还有一种字符“gb2312”,这种字符仅能存储简体中文字符。

UTF-8编码:它是一种全国家通过的一种编码,如果你的网站涉及到多个国家的语言,那么建议你选择UTF-8编码。

GBK和UTF8有什么区别?

UTF8编码格式很强大,支持所有国家的语言,正是因为它的强大,才会导致它占用的空间大小要比GBK大,对于网站打开速度而言,也是有一定影响的。

GBK编码格式,它的功能少,仅限于中文字符,当然它所占用的空间大小会随着它的功能而减少,打开网页的速度比较快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值