android studio引用assets文件夹里的东西路径怎么写

android studio引用assets文件夹里的东西路径怎么写,第1张

1默认AndroidStudio的assets文件路径:src/main/assets,在assets文件夹创建teachcoursexml文件,引用该文件的写法:InputStreamis=null;AssetManagermanager=getAssets();try{is=manageropen("teachcoursexml");}catch(Exc

因为系统在编译的时候不会编译assets下的资源文件,所以我们不能通过RXXXID的方式访问它们。那我么能不能通过该资源的绝对路径去访问它们呢?因为apk安装之后会放在/data/app/apk目录下,以apk形式存在,asset/res和被绑定在apk里,并不会解压到/data/data/YourApp目录下去,所以我们无法直接获取到assets的绝对路径,因为它们根本就没有。

InputStream inStream = contextgetAssets()open(fileName);这个context指service或者activity对象,如果是在service或者activity中,就直接调getAssets()就好了 fileName是相对路径,如果你的文件就是放在assets目录下,就直接写文件名比如texttxt就行了,如果是在assets的子目录下,就需要将子目录的路径也加上

assets文件夹是android程序中存放相关外部文件的一个目录,Android官方提供了相应的方法去访问该文件夹中的内容,故此我们并不需要进行相关的路径判断等代码 *** 作,直接调用相关方法打开文件并得到一个字节输入流(InputStream);

然后通过相应的字符编码方式读取字节解码为字符输入流(InputStreamReader);再通过BufferReader对字符输入流读取文本并将字符存入缓冲区以便能提供字符、数组和线段的高效读取;最后我们就能逐行对文件内容进行读取了;

public class MainActivity extends Activity {

方法倒是有很多种,不过直接利用资源管理器无疑是最快捷的。

我说的并不是解决方案的资源体系,而是SystemResourceResourceReader和Writer,虽然不像ResourceManager一样有丰富的支持,但是仅靠枚举接口也足够你使用了。

我抽了点空直接给你写了个辅助静态类(ResPacker),注释齐全已调试,拿走用吧^_^using System;using SystemCollections;using SystemCollectionsGeneric;using SystemResources;using SystemIO;using SystemDrawing;namespace ConsoleApplication3{ class Program { //写在前面: //1这个辅助类可以帮你把任意多的任意对象都塞到一个文件里去,也能一次性的提出来 //2赶时间,一句trycatch都没写,自己补上 //3不建议将不同类型的对象打包到一个文件里。用Image就都Image,用string就都string,免得取出来后还要判断类型 //4增加和删除我没有写,原因是打包的资源文件本质是连续的字节流,从中间删一个文件太麻烦 //5增加 *** 作可以使用非覆盖模式的打包方法强制追加(后面有说明) //6删除 *** 作建议读取所有的资源,删掉不要的然后一次性覆盖写入 //7再次提醒,NET是决不允许资源名重名或者是数字首字资源名的。数字首字问题我已处理,重名问题自己看着办,最好穿进去前就丢到字典当主键 //8我未做文件占用检测,所以请避免一边打包一边解包。 //9此为静态类,给客户用的增删改小工具程序请把此类复制走 //999感谢您的围观!代码随便用!有麻烦还找我! static void Main(string[] args) { //打包 Dictionary<string, object> dicToPack = new Dictionary<string, object>(); dicToPackAdd("key1", ImageFromFile(@"c:\Users\Mako\Pictures\1jpg")); dicToPackAdd("key2", "hello world"); ResPackerPack(dicToPack); //解包 Dictionary<string,object> dicRcv= ResPackerGetAllResources(); ConsoleWriteLine((string)dicRcv["key2"]); ConsoleWriteLine(dicRcv["key1"]GetType()FullName); ConsoleReadKey(); } } public static class ResPacker { /// <summary> /// 批量打包任意对象到资源文件 /// </summary> /// <param name="objCollection">被打包对象的列表。键值对中键为其在资源文件中的唯一标示名。</param> /// <param name="targetFilePath">目标资源文件。默认参数为当前目录下的"MyRespck"文件。</param> /// <param name="overwrite">是否覆盖已存在的目标文件。默认=True</param> public static void Pack(IDictionary<string,object> objCollection, string targetFilePath = "MyRespck", bool overwrite = true) { if (overwrite) FileDelete(targetFilePath); using (ResourceWriter rw = new ResourceWriter(targetFilePath)) { foreach (KeyValuePair<string, object> pair in objCollection) //为了防传进来的资源名有数字开头,资源名都加了前缀_ rwAddResource("_" + pairKey, pairValue); rwGenerate(); rwClose(); } } /// <summary> /// 解包资源文件,返回所有资源及其资源名 /// </summary> /// <param name="targetFilePath">要解包的资源文件。默认为当前目录下的"MyRespck"</param> /// <returns>资源字典,键值为资源唯一标示名。若无资源返回空集合。</returns> public static Dictionary<string,object> GetAllResources(string targetFilePath = "MyRespck") { Dictionary<string, object> rtn = new Dictionary<string, object>(); using (ResourceReader rr = new ResourceReader(targetFilePath)) { foreach (DictionaryEntry entry in rr) rtnAdd(((string)entryKey)Substring(1), entryValue); } return rtn; } /// <summary> /// 根据资源名在指定的资源文件中检索资源 /// </summary> /// <param name="resName">资源名</param> /// <param name="targetFilePath">要在其中检索的资源文件名,默认为"MyRespck"</param> /// <returns>资源名对应的资源</returns> public static object SearchResource(string resName,string targetFilePath="MyRespck") { object rtn=null; using (ResourceReader rr = new ResourceReader(targetFilePath)) { foreach(DictionaryEntry entry in rr) if ((string)entryKey == '_' + resName) { rtn = entryValue; break; } } return rtn; } }}

你好,你可以参考下面的程序,那个path不一定是路径也可是文件名。

public void deepFile(Context ctxDealFile, String path) {

try {

String str[] = ctxDealFilegetAssets()list(path);

if (strlength > 0) {//如果是目录

File file = new File("/data/" + path);

filemkdirs();

for (String string : str) {

path = path + "/" + string;

Systemoutprintln("zhoulc:\t" + path);

// textViewsetText(textViewgetText()+"\t"+path+"\t");

deepFile(ctxDealFile, path);

path = pathsubstring(0, pathlastIndexOf('/'));

}

} else {//如果是文件

InputStream is = ctxDealFilegetAssets()open(path);

FileOutputStream fos = new FileOutputStream(new File("/data/"

+ path));

byte[] buffer = new byte[1024];

int count = 0;

while (true) {

count++;

int len = isread(buffer);

if (len == -1) {

break;

}

foswrite(buffer, 0, len);

}

isclose();

fosclose();

}

} catch (IOException e) {

// TODO Auto-generated catch block

eprintStackTrace();

}

}

以上就是关于android studio引用assets文件夹里的东西路径怎么写全部的内容,包括:android studio引用assets文件夹里的东西路径怎么写、assets 放在哪个目录下'、开发Android项目,写单元测试类时,怎样读取assets中的文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9715189.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存