
最近项目开发中碰到这样一个需求:用户在定制的 Android 设备上插入 U 盘,然后在应用内导入 U 盘里的文件内容。
问题在于如何获取 U 盘的路径,网上搜索后大多数都是采用广播监听的方式来获取 U 盘的路径。但是如果 U 盘在设备开机之前就插着,这样登录应用后就获取不到 U 盘的路径了,于是乎此种方法作罢。
这时候同事告诉了另外一种方法,就是从文件中读取路径。
U 盘在插入系统后,如果系统检测到 U盘,便会在系统的 proc 目录的 mounts 文件内产生一条记录。
可以看到该文件记录了 U 盘每一次插入的相关信息(看不清楚?好吧,我摘取其中的一条用日志打印出来如下)。
最后,可能有小伙伴会问「既然是定制的 Android 设备,第一次插入的时候不是知道了 U 盘的路径了吗,只要以后写死这个路径不就好了吗」。好吧,其实当时我也是这么想的,但是实际上每次插拔 U 盘,路径是不断变化的,而且仔细看上面那张大图可以发现每条记录的 U 盘挂载路径都是不同的,这也是不能写死路径的原因。(PS:十分感谢同事「开志哥」在项目中给予的帮助)
// 根目录权限不允许,放到/data/packeg_dir下或SD卡中
package comexampledemo;
File dir = EnvironmentgetDataDirectory(); //获取data目录
//EnvironmentgetExternalStorageDirectory(); // 获取SD卡目录
File outFile=new File(dir,"/data/comexampledemo/texttxt"); //只能在自己的程序包里建立文件,这是权限问题
这个是由于android中的安全机制的缘故,由于android继承了Linux系统的传统,对于某个特定的目录有用户的权限,一共分为三种--可读,可写,可执行;虽然说可以设置某个特定的目录的权限,但是对于目录里面的子目录和子文件都可以进行权限的设置,也就是说出了根目录权限之外,子目录本身的权限也决定了子目录可否访问,这一点需要清楚了解,所以在判断完了是否是目录之外,还需要在进行listFiles()获取File[]数据后判断获取的数组是否为空,如果为空的话,文件夹是不可访问的。
package comhangchengutil;
import javaioFile;
import javaioFileOutputStream;
import javaioIOException;
import javaioInputStream;
import javautilArrayList;
import javautilHashMap;
import javautilList;
import androidappActivity;
import androidcontentContext;
import androidcontentresAssetManager;
public class GetfilesFromAssets {
private Activity activity;
private String[] files;
public GetfilesFromAssets(Context context) {
thisactivity = (Activity) context;
}
// 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();
// }
// }
public String[] getfileFromAssets(String path) {
AssetManager assetManager = activitygetAssets();
// String[] files;
try {
files = assetManagerlist(path);
} catch (IOException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
return files;
}
public List listHtmlOfAssets() {
List list = new ArrayList();
files = getfileFromAssets("html");
for (int i = 0; i < fileslength; i++) {
HashMap map = new HashMap();
mapput("htmlname", files[i]);
listadd(map);
}
return list;
}
}
以上就是关于如何获取Android系统挂载U盘的路径全部的内容,包括:如何获取Android系统挂载U盘的路径、Android 根目录下读写.txt文件、安卓开发怎么获取文件夹下面所有文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)