安卓系统,如何获取目录列表?

28

请问如何获取指定目录下的文件夹列表。

例如:

String path = Environment.getExternalStorageDirectory().toString()+"/myApp/";

现在我需要获取“path”目录内的目录列表。

谢谢!

5个回答

54

做类似这样的事情(添加空值检查、异常处理等)

File f = new File(path);
File[] files = f.listFiles();
for (File inFile : files) {
    if (inFile.isDirectory()) {
        // is directory
    }
}

17

我知道这个问题已经被回答过了,但是我注意到还有另一个可能更简单的选项。因此,为了将来参考,我要将它包含在内。

File myDirectory = new File("path to some directory");
File[] directories = myDirectory.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        return pathname.isDirectory();
    }
});

这段代码可以省略使用 for 循环的步骤。

Java 8:

File[] directories = myDirectory.listFiles(File::isDirectory);

2
这在Java 8中特别有用,因为可以简单地编写File directories[] = new File("some/path").listFiles(File::isDirectory); - Morris Franken

5
 File[] files = new File(path).listFiles();
    for ( File aFile : files ) {
         if ( aFile.isDirectory() ) {
              // so on
             }
       }

Android文件API参考在这里


1
    LinearLayout root = new LinearLayout(this);
    File file = new File(Environment.getExternalStorageDirectory().getPath());
    if(file.isDirectory() == false)
    {
        Toast.makeText(this, "ERROR", Toast.LENGTH_SHORT).show();
        return;
    }
    File[] files = file.listFiles();
    int i = 1;
    for(File f : files)
    {
        if(f.isFile() || f.isDirectory())
        {
            try
            {
                LinearLayout layout = new LinearLayout(this);
                layout.setId(i);
                    Button text = new Button(this);
                    text.setText(f.getName());
                    text.setMinWidth(400);
                layout.addView(text);
                root.addView(layout);
                i++;
            }
            catch(Exception e){}
        }
    }
    LinearLayout layout = new LinearLayout(this);
    HorizontalScrollView scroll = new HorizontalScrollView(this);
    scroll.addView(root);
    layout.addView(scroll);
    setContentView(layout);

(抱歉,我无法测试...) 它必须导入 "android.app."、"android.os."、"android.widget."、"android.view."、"android.view.View."、"java.io."


0

这个例子将列出文件夹并添加到列表中,然后显示为 Toast。如果没有添加读取外部文件的权限,则尝试 dir“/sdcard”时,您的应用程序将崩溃。

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.TestDirFolder" >
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme"
        android:resizeableActivity = "true">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity.java:

import android.app.*;
import android.os.*;
import android.widget.*;
import java.io.*;
import java.util.*;

public class MainActivity extends Activity 
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        sigL(DirFolder("/")+""); /// <<< HERE!!!
    sigL(DirFolder("/sdcard")+""); /// <<< HERE!!!
    }

    public static ArrayList<String> DirFolder(String path){
        ArrayList<String> ADir=new ArrayList<String>();  
        for (File inFile : new File(path).listFiles()) {
            if (inFile.isDirectory()) {
                ADir.add(""+inFile);
            }} return ADir;
    }

    public void sigL(String s){Toast.makeText(this , s, Toast.LENGTH_LONG).show();}

}

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 它包括读取权限<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> - phnghue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接