我有以下代码:
File dir = new File("/sdcard/LOST.DIR");
final File file[]=dir.listFiles();
此处的 file[] 数组包含目录中存在的所有文件的列表。我想根据文件扩展名创建另一个 file[] 数组。例如:这个新数组应该只包含所有图像文件的列表(以 .jpg / .png / .tif 等结尾),它应该排除其他文件。
我如何实现这一目标?
我有以下代码:
File dir = new File("/sdcard/LOST.DIR");
final File file[]=dir.listFiles();
此处的 file[] 数组包含目录中存在的所有文件的列表。我想根据文件扩展名创建另一个 file[] 数组。例如:这个新数组应该只包含所有图像文件的列表(以 .jpg / .png / .tif 等结尾),它应该排除其他文件。
我如何实现这一目标?
您可以尝试这样的方法来查找文件:
public void processDirectory(File aFile)
{
if (aFile.isFile())
{
processFile(aFile);
} else if (aFile.isDirectory()) {
File[] listOfFiles = aFile.listFiles();
if (listOfFiles != null) {
for (int i = 0; i < listOfFiles.length; i++)
processDirectory(listOfFiles[i]);
} else {
Log.d(TAG, " [ACCESS DENIED]");
}
}
}
public void processFile(File aFile)
{
try
{
if (!aFile.getName().endsWith(".mp3"))
return;
//Add file path to another array of files
}
}
现在你可以这样做:
File dir = new File("/sdcard/LOST.DIR");
processDirectory(dir)
更新:例如,您可以声明
ArrayList<String> = filesPath new ArrayList<String>();
在进程文件中:
filesPath.Add(aFile.getAbsolutePath());
最后你可以得到这样的数组:
filesPath.toArray();
尝试这样做。它可能有助于过滤具有提供的扩展名的文件:
import java.io.*;
abstract class Test implements FileFilter{
public static void main(String[] args){
File f = new File(args[0]);
final String[] okFileExtension = new String[]{"jpg","png","gif","pdf"};
File name[] = f.listFiles(new FileFilter(){
public boolean accept(File file){
for(String extension : okFileExtension){
if(file.getName().endsWith(extension))
return true;
}
return false;
}
});
}
}
你可以用Java File methods
这个,(我从不尝试这个)
File[] listFiles(FileFilter filter)
返回一个抽象路径名数组,表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
File[] listFiles(FilenameFilter filter)
返回一个抽象路径名数组,表示此抽象路径名表示的目录中满足指定过滤器的文件和目录。
看看这个不错的 JAVA 文件过滤器示例Filter Files in Java