android assets与raw资源

HarmonyOS 开发实践 —— 基于lottie的动画资源加载 lottie是一个适用于HarmonyOS的动画库,它可以解析json格式的动画,并在移动设备上进行本地渲染。下载安裝:ohpm install @ohos/lottie。 阅读详情

先看图片演示:

1 assets

assets文件夹资源的访问

       assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。

1.1 步骤

      1. 先在Activity里面调用getAssets() 来获取AssetManager引用。

      2. 再用AssetManager的open(String fileName, int accessMode) 方法则指定读取的文件以及访问模式就能得到输入流InputStream。 

      3. 然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStream.close() 。

      4.调用AssetManager.close() 关闭AssetManager。

1.2 assets示例

需要注意的是,来自Resources和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();

    }

}

  

2 Raw

存储在res/raw位置的文件不会被平台编译,而是作为可用的原始资源。读取原始资源非常简单。

2.1 步骤

首先调用Context.getResource获得当前应用程序上下文的Resources引用.

然后调用openRawResource(int id)得到InputStream.

最后,操作InputStream得到数据。

 

注意:把文件放在res/raw目录下,则R类会自动提供该id.

2.2提速文件读取

提速文件读取,其原理就是读的时候,先把文件的一些数据读到缓冲中。这样的好处是如果读的内容已经在缓冲中,就读缓冲的数据。如果没有,就让缓冲先从文件读取数据,然后再从缓冲读数据。这样的好处是减少对文件的操作次数,从而达到提高性能的目的。

坏处是要额外的内存来做缓冲区.

2.3  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();

   }

3 例子demo源码

java代码

package mm.shandong.com.testassets;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class MainActivity extends AppCompatActivity {
    WebView webView;
    TextView textView1;
    ListView listView;
    ImageView imageView;
    TextView textView2;
    ImageView imageView2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.webView);
        textView1 = (TextView) findViewById(R.id.textView1);
        textView2 = (TextView) findViewById(R.id.textView2);
        listView = (ListView) findViewById(R.id.listView);
        imageView = (ImageView) findViewById(R.id.imageView);
        imageView2 = (ImageView) findViewById(R.id.imageView2);
    }
    ///从assets中获取图片资源
    public void getImage(View view) {
        try {
            InputStream in = getAssets().open("blue.png");
            Bitmap bitmap = BitmapFactory.decodeStream(in);
            imageView.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    ///从Raw中获取图片资源
    public void getRawImage(View view) {
        InputStream in = getResources().openRawResource(R.raw.red);
        Bitmap bitmap = BitmapFactory.decodeStream(in);
        imageView2.setImageBitmap(bitmap);

    }
    ///从assets中获取所有文件的文件名
    public void getAllFileNames(View view) {
        try {
            String[] fileNames = getAssets().list("");
            ArrayAdapter arrayAdapter =
                    new ArrayAdapter(this,
                            android.R.layout.simple_list_item_1,
                            fileNames);
            listView.setAdapter(arrayAdapter);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   ///从Raw中获取文本文件
    public void getRawTxt(View view) {

        String str = readFromRaws(R.raw.rawtest);
        textView2.setText(str);
    }
  //从assets中获取文本文件
    public void getTxt(View view) {
        String str = readFromAssets("assetstest.txt");
        textView1.setText(str);
    }
   ///读取Raw目录下的文件
    public String readFromRaws(int resource_id) {
        try {
            InputStream inputStream = getResources().openRawResource(resource_id);
            byte[] buf = new byte[1024];
            int len = 0;
            ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
            while ((len = inputStream.read(buf)) != -1) {
                byteArrayOutputStream.write(buf, 0, len);
            }
            byte[] result = byteArrayOutputStream.toByteArray();
            String str = new String(result, "utf-8");
            return str;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
  ///读取asset下的文件
    public String readFromAssets(String name) {
        try {
            InputStream inputStream = getAssets().open(name);
            byte[] buf = new byte[1024];
            int len = 0;
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            while ((len = inputStream.read(buf)) != -1) {
                byteArrayOutputStream.write(buf, 0, len);
            }
            byte[] result = byteArrayOutputStream.toByteArray();
            String str = new String(result, "utf-8");
            return str;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
   //从assets中获取html文件
    public void getHtml(View view) {
        webView.loadUrl("file:///android_asset/www/assetstest.html ");

    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="getHtml"
            android:text="点击我加载assets目录下的html"
            android:textAllCaps="false" />

        <WebView
            android:id="@+id/webView"
            android:layout_width="match_parent"
            android:layout_height="230dp"></WebView>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="getTxt"
            android:text="通过AassetManager加载assets
            目录下的文件assetstest.txt"
            android:textAllCaps="false" />
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="getAllFileNames"
            android:text="通过AassetManager列出assets
            目录下的所有文件以及文件夹"
            android:textAllCaps="false" />

        <mm.shandong.com.testassets.myui.NoScrollListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </mm.shandong.com.testassets.myui.NoScrollListView>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="getImage"
            android:text="读取assets目录下的图片,用imageView显示"
            android:textAllCaps="false" />
        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="getRawTxt"
            android:text="读取raw文件夹下的文件rawtest.txt"
            android:textAllCaps="false" />

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

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="getRawImage"
            android:text="读取raw目录下的图片,用imageView显示"
            android:textAllCaps="false" />

        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</ScrollView>



 本人微博:honey_11

最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:例子代码,源码例子文档一网打尽


 

Android的xml/assets/raw资源使用详解 一、assets/xml/raw资源介绍 1.assets资源目录:assets目录下存放的资源代表应用无法直接访问的原生资源,这些文件将原封不动的存储到设备上,不会被编译为二进制形式,访问方式是通过文件名而不是资源ID。应用程序通过AssetManager以的字节流的形式来读取资源文件。assets与res/raw的区别是assets支持任意深度的子目录,这些资源文件不会生成任何资源ID。An 阅读详情

相关推荐

Android进阶之路 - res、raw、assets 资源解析、区别对比

那天遇到一个资源目录层级的问题,索性重新整理记录一下,希望能帮到如吾往昔之少年的你们,哈哈哈哈哈哈…

Android、前端、小程序、后端 1744

Android res/raw 和 assets 使用

今天在研究通知栏的时候,不想用系统默认的提示音,就想着自定义提示音,了解到可以可以在项目中添加raw文件夹或者assets文件夹来存放音频,使用raw的话是放在res下面的,也就是说可以直接用过R.raw.xxx.mp3,获取到该音频,但是该文件夹下的音频会被编译成二进制文件,不能直接打开,具体的新建方法: 下面是代码,说明下,我是为了图方便直接在BroadcastReceiver的onRecei

Sean_css的博客 6913

TCP/IP协议栈之LwIP(三)---网际寻址与路由(IPv4 + ARP + IPv6)

一、网际寻址原理 当网络设备地址总数并不是很多的情况下,有了唯一地址(比如MAC地址)就可以定位相互通信的主体。然而,当地址总数越来越多时,如何高效地从中找出通信的目标地址将成为一个重要的问题。为此人们发现地址除了具有唯一性还需要具有层次性。MAC地址虽然具有唯一性,但没有层次性,也即当网络设备增加到一定程度,需要将网络分成多个数据链路时,MAC地址无法跨链路寻址,是真正负责最终通信的地址。要实现跨局域网的网际寻址,就要靠具有层次性的网络IP地址实现了。

流云 6820

Android如何读取Raw及assets文件夹中文件的数据信息

1:在main.xml中定义两个TextView 用于raw及assets文件数据的读取与显示 2:在MainActivity中定义并赋予Id,调用对应的方法 3:读取raw文件夹中文件里的数据---->方法实现如下 4:读取assets文件夹中文件里的数据---->方法实现如下 5:文件命名如下: 详细代码实现见:http://

我的剑就是你的剑 1247

第 4 课 树莓派5的换源与中文输入法

树莓派换源、中文输入法的安装

嵌入式老牛的博客 2288

使用 CFD 仿真进行阀门性能分析:第一部分

了解如何使用 Ansys Discovery 评估阀门性能,使工程师能够设计出更好的产品。

jkh920184196的博客 3147

Android 中资源文件夹RES/RAW和ASSETS的使用区别

/ 读取res/raw/example.txt文件内容try {= null) {*res/raw:适用于简单的资源文件,文件名有严格要求,通过资源ID访问。1、优点:直接通过资源ID访问,性能较好。2、缺点:不支持复杂的文件夹结构,文件名有严格要求。3、适用场景:简单资源文件,如音频、视频、文本等*assets:适用于复杂的资源文件,支持文件夹层次结构,通过文件路径动态访问。通过合理选择和使用这两个文件夹,可以实现更高效的资源管理和访问,提升应用的组织性和性能。

结合项目案例,记录点点滴滴,自己回顾,分享他人o__o 1万+

保姆级教程:用MATLAB搞定双目相机标定,从导入图片到参数解读全流程

本文提供了一份详细的MATLAB双目相机标定全流程指南,涵盖从图片准备到参数解读的每个环节。重点讲解了棋盘格选择、拍摄技巧、MATLAB工具箱设置及参数优化,帮助读者避免常见错误并提升标定精度。特别适合机器人导航、三维重建等领域的开发者。

weixin_33737134的博客 429

android 编程实现Apk替换assets资源,Android开发之——资源raw与assets

android raw与assets区别res/raw和assets的相同点两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。res/raw和assets的不同点res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.raw.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。res/...

weixin_39870155的博客 1410

pytorch多层感知机实现假钞识别(完整项目构建)

目录1 项目构建2 超参数设置 config.py3 数据集预处理 preprocess.py4 数据集类构建 dataset_banknote.py5 模型构建 model.py6 训练trainer.py6.1 查看损失曲线7 在测试集上运行 inference.py 1 项目构建 构建项目文件夹Banknote,以及子文件夹与py文件。 名称 作用 data目录 存放原始数据与预处理后切分为训练集、验证机、测试集的数据 log目录 存放训练过程中保存的指标,如损失、精确度等

Demon_LMMan的博客 2027

拉曼光谱入门:5.表面增强与共振增强

拉曼散射效应因其弱信号特性限制了传统拉曼光谱术的检测灵敏度。为克服这一局限,表面增强拉曼光谱术(SERS)和共振增强拉曼光谱术(RRS)被开发出来,显著提升了信号强度。SERS通过金属表面的电磁和化学效应放大信号,而RRS则通过匹配激发光波长与分子电子跃迁波长来增强信号。这两种技术扩大了拉曼光谱的应用范围,尤其在低浓度和微量试样分析中表现出色,尽管在实验操作和试样损伤方面存在挑战。

qq_53529450的博客 1446

Android raw与assets资源文件夹

Android下存放资源的文件夹有两个,分别是raw与assets。二者都不会被编译成二进制文件。

DoubleQ的博客 4945

免杀思路总结

免杀思路总结 1.免杀技术简介 1.免杀的重要性 2.免杀的难度 3.杀毒软件的排行 国外 国内 1 、Bitdefender 1、360 2 、Norton 360 2、智量安全(没测过,据说很厉害) 3 、Kaspersky 3、火绒安全 4 、Webroot 4、金山独霸 5 、Trend Micro 5

LiBai'S BLOG 1万+

android的raw目录作用,android资源目录---assets与res/raw区别

android资源目录---assets与res/raw的不同Android 2011-05-24 14:40:21 阅读20 评论0 字号:大中小 订阅assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中。与res/raw不同点在于,ASSETS支持任意深度的子目录。这些文件不会生成任何资源ID,必须使用/assets开始(不包含它)的相对路径名。res:用于存放应用程序的资...

weixin_39820158的博客 308

MetaERP 的管理单元在设计哲学和实现逻辑上,确实与 Oracle EBS 的业务实体(OU)一脉相承,你可以放心地在已知的 Oracle 多组织架构框架下进行理解。它并没有推翻这套经典的核算模型

MetaERP的管理单元设计继承了Oracle EBS业务实体(OU)的核心思想,并进行了现代技术重构。管理单元(MU)作为OU的超集,延续了业务数据隔离与流程执行边界的定位,但通过元数据驱动的多租户架构实现更灵活的数据隔离。MetaERP采用三层解耦设计(核算单元、自然科目、核算维度),解决了EBS科目组合爆炸问题,并实现事件驱动的实时核算。相较于EBS的批处理模式,MetaERP通过云原生架构和元数据驱动配置,显著提升了灵活性、实时性和扩展性,支持跨法人的业务统一管理视图。

金牌架构师 576

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Android apk携带资源之raw & assets

<br /><br /> /res/raw & /assets 携带资源<br />   在android开发中,总有一些资源是想要随着安装包apk携带的,这些资源如数据库文件,文本,mp3等等。最早的做法是,在prebulid过程 中,修改mk文件,将指定文件提前拷贝到系统某一文件夹目录下。这样的做法,既不科学也不美观还不安全,处于对代码的洁癖,我终于在不太忙的时候把这些资 源文件带在自己的apk下。<br />   之前说过没,由于提升速度,从文本解析调整为数据库查询。在携带文件时,这两种文件本

SE_ZheHao的专栏 2578

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Android资源二:assets和raw下的资源

/main/assets/ 1,加载声音 AssetManager am = getAssets(); AssetFileDescriptor afd = am.openFd("shot.mp3"); MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(afd.get...

zk的博客 522

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android raw与assets资源

*res/raw和assets的相同点: 1.两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。 *res/raw和assets的不同点: 1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。 2.r

chenaini119的专栏 669

android的raw目录作用,【转】android资源目录---assets与res/raw区别

assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中。与res/raw不同点在于,ASSETS支持任意深度的子目录。这些文件不会生成任何资源ID,必须使用/assets开始(不包含它)的相对路径名。res:用于存放应用程序的资源(如图标、GUI布局等),将被打包到编译后的Java中。不支持深度子目录res/menu:存放基于XML的菜单描述;res/raw:存放通用的文件, 该文件...

weixin_42408094的博客 595

android资源目录---assets与res/raw区别

<br /><br />android资源目录---assets与res/raw的不同<br /> <br />Android 2011-05-24 14:40:21 阅读20 评论0   字号:大中小 订阅<br />assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中。与res/raw不同点在于,ASSETS支持任意深度的子目录。这些文件不会生成任何资源ID,必须使用/assets开始(不包含它)的相对路径名。<br /> <br />res:用于存放应用程序的资源(如图标、GUI布局等

4万+

android raw 引用,Android 资源-raw和assets

前言这几天遇到了一个坑!关于resource相关的操作。具体的需求是:替换所有班级的logo,但是移动端android和ios没有建立协议,所以临时采用的是直接上传图片来完成这项任务。当然一个项目有很多人开发,之前的功能已经实现了根据文件的URI来上传具体的File。问题来了:怎么才能读取到android res 具体的File呢?认识res1. res/raw和assets的区别?共同点:res...

weixin_39865625的博客 379

Android资源文件目录assets和raw

assets 资源目录或者叫资产目录,里面存放的是无法直接访问的原生资源。与res属于同级目录。应用程序需要通过AssetsManager以二进制流的形式读取文件。应用程序编译的时候不会在R类中为assets目录下的文件创建索引。raw在res目录下(res/raw)也是用于存放一些资源文件的。应用程序编译的时候raw目录下的资源文件会在R类中生成索引res/raw与assets的比较相同点: 都是

Elven_Shi的专栏 1761

Android : assets与res/raw资源目录的区别

Android : assets与res/raw资源目录的区别 Author : Aoyousatuo Zhao http://blog.sina.com.cn/aoyousatuo         在应用的开发中,当我们创建一个新的Android工程后,我们会发现工程中包含了一个目录assets,另外当我们察看一些示例工程的时候,有时会发现在该工程的资源目录下会有一个raw目录

学无止境~ 733

android 读取raw资源,Android-res/raw/assets存放资源的限制和读取方式

res/raw和assets的相同点两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制文件。res/raw和assets的不同点1. res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要使用AssetManager类。2. res/raw文件下不可以新建...

weixin_35426345的博客 2692
上一篇: FrameLayout详解
下一篇: sqlite 增删改查完整例子。
androidWuYou
博客等级 码龄10年 51粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值