0

我只想向用户显示 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);
4

2 回答 2

0

我有 android 4.1.2 的三星 Galaxy s3。我的内部手机内存命名为 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());
       }
     }
    }
   }    
  }
于 2013-04-03T10:59:16.490 回答
0

使用以下代码并根据您的需要进行操作

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"));

}
于 2013-04-03T10:55:42.750 回答