你获取的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文件夹下的绝对路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)