Estou fazendo um programa de busca de diretórios e filtro de arquivos por suas extensões. Preciso usar a classe File
para buscar o diretório (isso consegui fazer), porém, agora preciso que ele faça uma varredura nos diretórios em busca dos arquivos com a exntensão que o usuario informar. Se tiver certo, então ele me traz a lista de arquivos. Para filtrar/buscar a extensão nos arquivos usei FilenameUtils
e sua função wildcardMatchOnSystem
, e condições de Verdadeiro e/ou falso. Porém traz esse erro quando digito a extensão que quero buscar:
Diretório que será analisado:
/home/juliana
Extensoes de arquivos:pdf
java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.next(Scanner.java:1418)
at controle.BuscaRecursiva2.pesquisaDiretorios(BuscaRecursiva2.java:25)
at controle.BuscaRecursiva2.main(BuscaRecursiva2.java:124)
package controle;
import java.io.*;
import java.util.Locale;
import java.util.Scanner;
import org.apache.commons.io.FilenameUtils;
//import java.util.InputMismatchException;
public class BuscaRecursiva2 {
private int nivel = 0;
void pesquisaDiretorios() {
try {
@SuppressWarnings("resource")
Scanner teclado=new Scanner(System.in);
teclado.useLocale(Locale.US);
//variaveis com caminhos a serem pesquisados
System.out.println("Diretório que será analisado: " );
String caminhoDiretorio=teclado.nextLine();
System.out.print("\n Extensoes de arquivos:");
String mascara=teclado.next("%d%d"+"*txt;*pdf;*txt;*doc;*xls;*java;*mp4;*jpg;*rar;*sh");
String mascaras[]= mascara.split(";");
System.out.println("\n Extensoes nao desejadas:");
String negoMascara=teclado.next("%d%d"+"txt*; pdf*; mp3*; doc*; xls*; java*; mp4*; jpg*; rar*; sh*");
String nego[]= negoMascara.split(";");
System.out.println("Limite do nivel de busca: " );
nivel = teclado.nextInt();
File diretorio = new File(caminhoDiretorio);
//verifica a existencia do diretorio
if(!diretorio.exists()) {
throw new Exception("Não existe!");
}
pesquisaMascara(diretorio.getPath(), mascaras,nego);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void pesquisaMascara(String diretorio, String[] mascaras, String [] nego) throws Exception {
if(nivel >= 0) {
File fDir = new File(diretorio);
if (fDir.isDirectory()) {
File[] listaFiles = fDir.listFiles();
for (File file : listaFiles ) {
String[] extensao = file.list();
Boolean showMascaras = false;
while(showMascaras != null) {
for (int i = 0; i > mascaras.length; i++) {
String masc = mascaras[i];
if((extensao=masc(mascaras[i])) != null){
Boolean showNego=false;
for(int l=0;l<nego.length;l++) {
if((extensao=negos(nego[l]))!=null) {
showNego = true;
break;
}
}
if(showNego=false) {
showMascaras=true;
break;
}
}
}
}
System.out.println("[ANALISANDO] " + file);
if (file.isDirectory()) {
if(nivel > 0) {
nivel--;
// se e diretorio, entra no diretorio
pesquisaMascara(file.getPath(), mascaras,nego);
} else {
continue;
}
} else {
if (FilenameUtils.wildcardMatchOnSystem(file.getName(), mascaras, nego)) {
System.out.println("Encontrei o arquivo:" + file.getAbsolutePath());
}
}
}
}
}
}
public String[] negos(String nego) {
// TODO Auto-generated method stub
return null;
}
public String[] masc(String mascaras) {
// TODO Auto-generated method stub
return null;
}
public static void main(String[] args) {
new BuscaRecursiva2().pesquisaDiretorios();
}
}
O que estaria errado ou mal estruturado no meu código??? POR FAVOR AJUDEM-ME! Tem semana que não encontro a resaposta…
OBRIGADA, DESDE JÁ!