Galera estou procurando arquivos em um diretório usando thread , mas acontece que quando eu colocar no diretório raiz no caso o C:\ no Win se o arquivos estiver em um diretório muito profundo exemplo no Desktop top ele não acha
Classe com método de leitura
package TAREFAS;
import java.io.File;
import java.util.ArrayList;
import java.util.concurrent.Executor;
public class ProcuraArquivoComThread implements Runnable {
private static boolean achou;
private File pasta;
private String arquivo;
private Executor pool;
public ProcuraArquivoComThread(File pasta, String arquivo, Executor pool) {
this.pasta = pasta;
this.arquivo = arquivo;
this.pool = pool;
}
public static void procura(String pasta, String arquivo, Executor pool) {
achou = false;
pool.execute(new ProcuraArquivoComThread(new File(pasta), arquivo, pool));
}
public void run() {
if(achou){
return;
}
for(File f : pasta.listFiles()){
if(achou){
break;
} else if(f.isDirectory()){
pool.execute(new ProcuraArquivoComThread (f, arquivo, pool));
} else if(f.getName().equalsIgnoreCase(arquivo)){
GUI.GuiPrincipal.caminho = f.getAbsolutePath();
achou = true;
break;
}
}
}
}
E aqui a interface
public void procurarArquivo() throws InterruptedException {
String pasta = JOptionPane.showInputDialog("Digite o diretorio da onde a busca deve iniciar");
if(!pasta.equals("") && pasta != null){
String arquivo = JOptionPane.showInputDialog("Digite o nome do arquivo a ser lido e sua extensão");
if(!arquivo.equals("") && arquivo != null){
ScheduledExecutorService threadpool = Executors.newScheduledThreadPool(4);
ProcuraArquivoComThread.procura(pasta, arquivo, threadpool);
int quantidadeDeTentativas=0;
int esc = JOptionPane.showConfirmDialog(this, "Procurando arquivo...", "Busca de arquivo", JOptionPane.OK_CANCEL_OPTION);
do{
if(esc == JOptionPane.CANCEL_OPTION){
break;
}
if(quantidadeDeTentativas > 5000){
//JOptionPane.showMessageDialog(this, "Arquivo não encontrado");
break;
}
quantidadeDeTentativas++;
} while(caminho==null);
threadpool.shutdown();
if(esc != JOptionPane.CANCEL_OPTION){
gerarPainel(new File(caminho));
caminho = null;
}
} else{
JOptionPane.showMessageDialog(this, "Digite o nome do arquivo");
}
} else {
JOptionPane.showMessageDialog(this, "Digite o caminho do diretorio");
}
}