2012-06-13 13 views

Respuesta

5

Pruebe el código abajo.

File dir = new File("path to directory"); 

String[] names = dir.list(
    new FilenameFilter() 
    { 
     public boolean accept(File dir, String name) 
     { 
      return name.endsWith(".your file type"); 
      // Example 
      // return name.endsWith(".mp3"); 
     } 
    }); 

Tenga en cuenta que las cadenas devueltas son los nombres de archivo sólo, que no contienen la ruta completa.

2

obtener la ruta de la tarjeta SD e introduzca todos los archivos a una gran variedad de File:

File[] file = Environment.getExternalStorageDirectory().listFiles(); 


    for (File f : file) 
    { 
     if (f.isFile() && f.getpath().endswith(".something")) { ... do stuff } 
    } 
+0

Esto es solo el archivo bajo tarjeta SD, no incluido en la subcarpeta – kidnan1991

11

Ésta es mi FileFilter para archivos de audio (se puede cambiar la lista de extensiones para su escenario).

package com.designfuture.music.util; 

import java.io.File; 
import java.io.FileFilter; 
import java.io.FilenameFilter; 
import java.util.ArrayList; 

import com.designfuture.framework.util.LogHelper; 

public class AudioFileFilter implements FileFilter { 

    protected static final String TAG = "AudioFileFilter"; 
    /** 
    * allows Directories 
    */ 
    private final boolean allowDirectories; 

    public AudioFileFilter(boolean allowDirectories) { 
     this.allowDirectories = allowDirectories; 
    } 

    public AudioFileFilter() { 
     this(true); 
    } 

    @Override 
    public boolean accept(File f) { 
     if (f.isHidden() || !f.canRead()) { 
      return false; 
     } 

     if (f.isDirectory()) { 
      return checkDirectory(f); 
     } 
     return checkFileExtension(f); 
    } 

    private boolean checkFileExtension(File f) { 
     String ext = getFileExtension(f); 
     if (ext == null) return false; 
     try { 
      if (SupportedFileFormat.valueOf(ext.toUpperCase()) != null) { 
       return true; 
      } 
     } catch(IllegalArgumentException e) { 
      //Not known enum value 
      return false;  
     } 
     return false; 
    } 

    private boolean checkDirectory(File dir) { 
     if (!allowDirectories) { 
      return false; 
     } else { 
      final ArrayList<File> subDirs = new ArrayList<File>(); 
      int songNumb = dir.listFiles(new FileFilter() { 

       @Override 
       public boolean accept(File file) { 
        if (file.isFile()) { 
         if (file.getName().equals(".nomedia")) 
          return false; 

         return checkFileExtension(file); 
        } else if (file.isDirectory()){ 
         subDirs.add(file); 
         return false; 
        } else 
         return false; 
       } 
      }).length; 

      if (songNumb > 0) { 
       LogHelper.i(TAG, "checkDirectory: dir " + dir.toString() + " return true con songNumb -> " + songNumb); 
       return true; 
      } 

      for(File subDir: subDirs) { 
       if (checkDirectory(subDir)) { 
        LogHelper.i(TAG, "checkDirectory [for]: subDir " + subDir.toString() + " return true"); 
        return true; 
       } 
      } 
      return false; 
     }  
    } 

    private boolean checkFileExtension(String fileName) { 
     String ext = getFileExtension(fileName); 
     if (ext == null) return false; 
     try { 
      if (SupportedFileFormat.valueOf(ext.toUpperCase()) != null) { 
       return true; 
      } 
     } catch(IllegalArgumentException e) { 
      //Not known enum value 
      return false;  
     } 
     return false; 
    } 

    public String getFileExtension(File f) { 
     return getFileExtension(f.getName()); 
    } 

    public String getFileExtension(String fileName) { 
     int i = fileName.lastIndexOf('.'); 
     if (i > 0) { 
      return fileName.substring(i+1); 
     } else 
      return null; 
    } 

    /** 
    * Files formats currently supported by Library 
    */ 
    public enum SupportedFileFormat 
    { 
     _3GP("3gp"), 
     MP4("mp4"), 
     M4A("m4a"), 
     AAC("aac"), 
     TS("ts"), 
     FLAC("flac"), 
     MP3("mp3"), 
     MID("mid"), 
     XMF("xmf"), 
     MXMF("mxmf"), 
     RTTTL("rtttl"), 
     RTX("rtx"), 
     OTA("ota"), 
     IMY("imy"), 
     OGG("ogg"), 
     MKV("mkv"), 
     WAV("wav"); 

     private String filesuffix; 

     SupportedFileFormat(String filesuffix) { 
      this.filesuffix = filesuffix; 
     } 

     public String getFilesuffix() { 
      return filesuffix; 
     } 
    } 

} 

usted tiene que utilizar un FileFilter para obtener una lista filtrada de archivos y dir desde un directorio de esta manera:

File[] files = dir.listFiles(new AudioFileFilter()); 
1

acabo de encontrar una manera más fácil de hacer el trabajo.

Si está escogiendo archivos comunes como imágenes o videos, use una biblioteca.

Para cualquier otro tipo, puede probar la biblioteca común de ios de apache.

En primer lugar,

dependencies { 
    implementation 'commons-io:commons-io:2.5' 
} 

Entonces,

val iterator = FileUtils.iterateFiles(
    Environment.getExternalStorageDirectory(), 
    FileFilterUtils.suffixFileFilter("pdf"), 
    TrueFileFilter.INSTANCE) 
while (iterator.hasNext()) { 
    val fileINeed = iterator.next() 
    // do your job 
} 

que utilizan archivos PDF de picking como un ejemplo. Manejará los subdiccionarios automáticamente. Entonces el iterador contiene todos los archivos PDF de mi dispositivo.

Sus API son muy flexibles, potentes y fáciles de usar. Puede agregar muchos filtros o reglas para finalizar su trabajo específico XD

Cuestiones relacionadas