如何获得assets目录下文件的uri

如何获得assets目录下文件的uri,第1张

你获取的uri没有问题。但assets目录下的不能使用这种方法读取。你得把它先复制到sdcard中,然后从sdcard中传递这个至于原因嘛:assets目录里面的资源文件还在应用程序的apk文件中,一个压缩文件中。所以不能这样读

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

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

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutactivity_main);

try {

InputStream inputStream = getResources()getAssets()open("infotxt");

InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

String info = "";

while ((info = bufferedReaderreadLine()) != null) {

Logi("fff", info);

ToastmakeText(MainActivitythis, info, 1000)show();

}

} catch (IOException e) {

eprintStackTrace();

}

}

}

我是用usb连手机测试的,估计是手机上运行只有apk,并没有产生assets文件夹现在我是直接读取拷贝到sd卡上的数据,路径是/mnt/sdcard/xxxjpg 详情回复发表于 2013-8-12 20:5

在自己的app中安装assets目录下的apk文件的方法:

详细过程如下:

public class MainActivity extends Activity {

Context mContext;

@Override

protected void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutactivity_main);

mContext = this;

//ToastmakeText(this, ""+EnvironmentgetExternalStorageDirectory()getAbsolutePath(), 0)show();

if(copyApkFromAssets(this, "testapk", EnvironmentgetExternalStorageDirectory()getAbsolutePath()+"/testapk")){

Builder m = new AlertDialogBuilder(mContext)

setIcon(Rdrawableic_launcher)setMessage("是否安装?")

setIcon(Rdrawableic_launcher)

setPositiveButton("yes", new OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Intent intent = new Intent(IntentACTION_VIEW);

intentaddFlags(IntentFLAG_ACTIVITY_NEW_TASK);

intentsetDataAndType(Uriparse("file://" + EnvironmentgetExternalStorageDirectory()getAbsolutePath()+"/testapk"),

"application/vndandroidpackage-archive");

mContextstartActivity(intent);

}

});

mshow();

}

}

public boolean copyApkFromAssets(Context context, String fileName, String path) {

boolean copyIsFinish = false;

try {

InputStream is = contextgetAssets()open(fileName);

File file = new File(path);

filecreateNewFile();

FileOutputStream fos = new FileOutputStream(file);

byte[] temp = new byte[1024];

int i = 0;

while ((i = isread(temp)) > 0) {

foswrite(temp, 0, i);

}

fosclose();

isclose();

copyIsFinish = true;

} catch (IOException e) {

eprintStackTrace();

}

return copyIsFinish;

}

}

1默认Android Studio的assets文件夹路径:src/main/assets,在assets文件夹创建teachcoursexml文件,引用该文件的写法:

123456InputStream is = null;AssetManager manager = getAssets();try { is = manageropen("teachcoursexml");} catch (Exception e) { eprintStackTrace();}

2直接写上assets文件夹内文件的名称,使用AssetsManager管理器打开,获取输入流,最后解析里面的内容

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

assets的读取方式:

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

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

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

4调用AssetManagerclose() 关闭AssetManager。

需要注意的是,来自Resources和Assets 中的文件只可以读取而不能进行写的 *** 作。

以上就是关于如何获得assets目录下文件的uri全部的内容,包括:如何获得assets目录下文件的uri、如何得到android项目assets目录中的内容、怎么获取assets文件夹下的绝对路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9401455.html

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

发表评论

登录后才能评论

评论列表(0条)

保存