Java 将“File[]”转换为“List”的更好方法<;字符串>`

Java 将“File[]”转换为“List”的更好方法<;字符串>`,java,android,file,Java,Android,File,我正试图通过ListAdapter列出SD卡中的所有文件夹。但是我得到了运行时异常@item.add(file.getName()+“/”)。是否有更好的方法将文件[]转换为列表 私有列表项=null; 字符串extState=Environment.getExternalStorageState(); 如果(!extState.equals(Environment.MEDIA_MOUNTED)){ .... }否则{ 文件sd=Environment.getExternalStorageDir

我正试图通过ListAdapter列出SD卡中的所有文件夹。但是我得到了运行时异常@
item.add(file.getName()+“/”)。是否有更好的方法将
文件[]
转换为
列表

私有列表项=null;
字符串extState=Environment.getExternalStorageState();
如果(!extState.equals(Environment.MEDIA_MOUNTED)){
....
}否则{
文件sd=Environment.getExternalStorageDirectory();
FileFilter filterDirectoriesOnly=新建FileFilter(){
公共布尔接受(文件){
返回文件.isDirectory();
}
};
File[]sdDirectories=sd.listFiles(仅限FilterDirectories);
for(int i=0;i
您将获得运行时异常bacause

私有列表项=null

从未初始化过

因此,首先初始化,然后添加


你所做的一切似乎都是对的。。除了初始化…

初始化列表(因此例外)。但除此之外,在我看来还不错。我是说,至少我会这么做。这里我唯一建议的是不要在函数中重新实例化变量
File sd
FileFilter filterdirectoriesOnly
,因为我假设当用户单击目录并加载新目录的结果时,您会一次又一次地调用它。所以我提到的两个对象是相同的,但是每次你打电话时都会被重新初始化。您可以将它移到外面。

您可以使用增强的for循环将其缩短一点:

File[] sdDirectories = sd.listFiles(filterDirectoriesOnly);
for (File file : sdDirectories)
{
    item.add(file.getName() + "/");
}
有一个,但它们不会有您的尾随
/
,并且您必须能够按文件名进行筛选:

String[] fileNames = sd.list(fileNameFilter);
List<String> fileNamesList = Arrays.asList(fileNames);
String[]fileNames=sd.list(fileNameFilter);
List fileNamesList=Arrays.asList(文件名);

你是对的,但你没有回答OP的答案。。将
文件[]
转换为
列表
@binoybau的更好方法是:没错,只有当您可以按文件名进行筛选时,该方法才会起作用:\@binoybau-不幸的是,您是按文件类型进行筛选的,而使用FileNameFilter无法做到这一点。我认为增强的for-loop版本是最好的。
String[] fileNames = sd.list(fileNameFilter);
List<String> fileNamesList = Arrays.asList(fileNames);