如何获取Android系统挂载U盘的路径

如何获取Android系统挂载U盘的路径,第1张

最近项目开发中碰到这样一个需求:用户在定制的 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文件、安卓开发怎么获取文件夹下面所有文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

    保存