2011-12-02 163 views
1

我有下面的代码过滤文件阵列。 我想根据文件扩展名创建另一个文件[]数组。例如:这个新阵列应该只包含所有图像文件的列表(以.jpg/.png/.tif等结尾),它应该排除其他文件。根据文件扩展名

我该如何做到这一点?

回答

0

您可以使用Java File methods对于这一点,(我从来没有尝试这个)

File[] listFiles(FileFilter filter) 

返回抽象路径名表示中满足指定过滤器的抽象路径名表示的目录中的文件和目录的数组。

File[] listFiles(FilenameFilter filter) 

返回一个抽象路径表示在由满足指定过滤此抽象路径名表示的目录中的文件和目录的阵列。

看看这个漂亮的JAVA文件筛选器例如Filter Files in Java

1

你可以尝试这样的事情来查找文件:

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

和processFile:

filesPath.Add(aFile.getAbsolutePath()); 

,并在年底就可以得到数组是这样的:

filesPath.toArray(); 
+0

感谢您的回复!目前我唯一怀疑的是processFile(File aFile)方法,如何将文件路径添加到另一个文件数组中? 。文件f []; for(i = 0; i user838522

+0

,看看更新部分,也许有帮助 – Style

0

尝试这样做。它可以帮助过滤提供了扩展名的文件:

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