Prezados colegas,
Estou desenvolvendo um aplicativo que precisa “varrer” um diretório e armazenar em um ArrayList o nome dos arquivos encontrados, mediante um critério estabelecido através de expressão regular. Segue o código abaixo:
import java.util.regex.Pattern;
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
import java.io.File;
import java.io.FileFilter;
import java.util.Iterator;
class ListaArquivosExpressaoRegular {
private static final String expressao = "0[1-2]\_[0-9]{4}\_[0-9]{3}\_[0-9]{5}\_[0-9]{4}\_[0-9]{5}\_[0-9]{5}.(TXT|WAV|MP3|JPG|GIF|PNG|AVI|MPG)";
public List<File> listarArquivos (String nomeDiretorio, String expressaoRegular)
{
final Pattern pat = Pattern.compile (expressaoRegular, Pattern.CASE_INSENSITIVE);
return Arrays.asList (new File (nomeDiretorio).listFiles(new FileFilter()
{
public boolean accept (File pathname)
{
return !pathname.isDirectory() && pat.matcher (pathname.getName()).matches();
}
}));
}
public static void main (String[] args) {
ListaArquivosExpressaoRegular lear = new ListaArquivosExpressaoRegular();
String nomeArquivo = "";
ArrayList<File> arquivos = new ArrayList<File>(lear.listarArquivos (".", expressao));
Iterator it = arquivos.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
O que ocorre é que na lista de arquivos está sendo incluído o diretório corrente e a barra separadora. Estou precisando somente do nome dos arquivos armazenados no ArrayList.
Exemplo:
Preciso que a lista seja conforme a abaixo (sem usar substring…):
01_0001_000_00000_0001_00000_00000.txt
01_0001_000_00000_0001_00000_00000.jpg
01_0001_000_00001_0001_00000_00000.avi
01_0001_000_00002_0001_00000_00000.wav
e estou obtendo:
.\01_0001_000_00000_0001_00000_00000.txt
.\01_0001_000_00000_0001_00000_00000.jpg
.\01_0001_000_00001_0001_00000_00000.avi
.\01_0001_000_00002_0001_00000_00000.wav
Alguém pode dar uma ajuda?
Atenciosamente,
Augusto Cesar Nunes