请问如何获取指定目录下的文件夹列表。
例如:
String path = Environment.getExternalStorageDirectory().toString()+"/myApp/";
现在我需要获取“path”目录内的目录列表。
谢谢!
做类似这样的事情(添加空值检查、异常处理等)
File f = new File(path);
File[] files = f.listFiles();
for (File inFile : files) {
if (inFile.isDirectory()) {
// is directory
}
}
我知道这个问题已经被回答过了,但是我注意到还有另一个可能更简单的选项。因此,为了将来参考,我要将它包含在内。
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);
File[] files = new File(path).listFiles();
for ( File aFile : files ) {
if ( aFile.isDirectory() ) {
// so on
}
}
Android文件API参考在这里
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."
这个例子将列出文件夹并添加到列表中,然后显示为 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();}
}
File directories[] = new File("some/path").listFiles(File::isDirectory);
。 - Morris Franken