【问题标题】:Filter .xml file in the File Explorer在文件资源管理器中过滤 .xml 文件
【发布时间】:2013-03-24 23:57:03
【问题描述】:
我只想向用户显示当前存在于 sd 卡中的 .xml 文件。我尝试以下操作,但它显示了我的 sd 卡中的所有文件,包括目录
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/xml");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(intent, "Select XML File"), SelectXMLFILE);
【问题讨论】:
标签:
android
xml
file
filtering
【解决方案1】:
我有三星 Galaxy s3 和 android 4.1.2。我的手机内部存储器名为 sdcard0,外部卡名为 extSdCard。
Environment.getExternalStorageDirectory()
所以上面返回的是sdcard0的路径,即手机内存
在这种情况下,您可以使用以下获取实际路径
String externalpath = new String();
String internalpath = new String();
public void getExternalMounts() {
Runtime runtime = Runtime.getRuntime();
try
{
Process proc = runtime.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;
BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
if (line.contains("secure")) continue;
if (line.contains("asec")) continue;
if (line.contains("fat")) {//external card
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
externalpath = externalpath.concat("*" + columns[1] + "\n");
}
}
else if (line.contains("fuse")) {//internal storage
String columns[] = line.split(" ");
if (columns != null && columns.length > 1) {
internalpath = internalpath.concat(columns[1] + "\n");
}
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("Path of sd card external............"+externalpath);
System.out.println("Path of internal memory............"+internalpath);
}
一旦你得到了路径。
File dir= new File(android.os.Environment.getExternalStorageDirectory());
//Instead of android.os.Environment.getExternalStorageDirectory() you can use internalpath or externalpath
然后调用
walkdir(dir);
ArrayList<String> filepath= new ArrayList<String>();//contains list of all files ending with .xml
public void walkdir(File dir) {
String xmlPattern = ".xml";
File listFile[] = dir.listFiles();
if (listFile != null) {
for (int i = 0; i < listFile.length; i++) {
if (listFile[i].isDirectory()) {
walkdir(listFile[i]);
} else {
if (listFile[i].getName().endsWith(xmlPattern)){
//Do what ever u want
filepath.add( listFile[i].getAbsolutePath());
}
}
}
}
}
【解决方案2】:
使用以下代码并根据您的需要进行操作
File sdcardPath = new File(Environment.getExternalStorageDirectory().getPath() +"/SomeFolder");
List<String> list;
list = new ArrayList<String>();
list=sdcardPath.listFiles();
现在遍历列表并检查每个文件名并应用 endWith("xml");项目上的功能以获取所有 xml 文件。希望它有效。
这样循环
List<String> XMLFiles= new ArrayList<String>();
for(int i=0; i<=list.size(); i++)
{
XMLFiles.add(list.get(i).endsWith("xml"));
}