olá, boa noite !! preciso fazer com que eu busque em todos os diretórios da unidade corrente, sendo C:, F:, G: etc um determinado arquivo com o nome de por ex: ATUALIZA.EXE
bom, o que fiz foi varrer o hd e localizar o arquivo ATUALIZA.EXE , adicionar em uma lista o nome dos diretorios onde foram encontrados estes arquivos. bom, consigo ler o
retorno da lista normalmente me indicando que foi encontrado o ATUALIZA.EXE em tantos diretorios. agora o que preciso fazer é substituir este arquivo ATUALIZA.EXE por um
outro arquivo ATUALIZA.EXE , e onde estou apanhando é nesta parte do codigo:
for (String local : search.getResultado()) {
destFolder = new File(local.toLowerCase());
System.out.println("encontrado no dir: "
+ destFolder.getParent());
}
aqui ele me mostra o que eu quero, procurando o arquivo customermanagerforweb.war :
o problema é que ele esta localizando este arquivo, adicionando na lista dentro do forearch, e eu não consigo já copiar o novo arquivo para o diretorio encontrado.
ja que dentro do foreach ele ainda esta adicionando a lista, e nao consigo pegar o resulado por fora do laço.
não sei se da forma que fiz para localizar foi o melhor jeito, pode estar errado, se alguem tiver uma outra idéia e quizer compartilhar, agradeco !
segue o codigo completo:
a classe que faz a procura :
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import org.apache.commons.io.FileUtils;
public class SearchFiles {
private static String directory = null;
private static String fileName = null;
private static String searchName;
public void searchRoot(File directory, String fileName) {
setSearchName(fileName);
if (directory.isDirectory()) {
searchInDirectory(directory);
} else {
System.out.println(directory.getAbsoluteFile()
+ " Não é um diretório");
}
}
@SuppressWarnings("unused")
private void searchInDirectory(File file) {
String fileSeparator = "\\";
System.out.println("procurando no diretorio " + file.getAbsoluteFile());
if (file.isDirectory()) {
if (file.canRead()) {
for (File temp : file.listFiles()) {
if (temp.isDirectory()) {
searchInDirectory(temp);
} else {
if (getSearchName()
.equals(temp.getName().toLowerCase())) {
try {
resultado.add(temp.getCanonicalPath()
.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
} else {
System.out
.println(file.getAbsoluteFile() + " Permissão negada");
}
}
}
@SuppressWarnings({ "static-access", "unused" })
public void runSearchFile(String directory, String fileName)
throws IOException {
SearchFiles search = new SearchFiles();
search.searchRoot(new File(directory), fileName.toLowerCase());
int count = search.getResultado().size();
if (count == 0) {
System.out.println("\nNão foi encontrado o arquivo "
+ search.getFileName());
} else {
System.out.println("\n");
for (String local : search.getResultado()) {
destFolder = new File(local.toLowerCase());
System.out.println("encontrado no dir: "
+ destFolder.getParent());
}
System.out.println("\ntotal de : " + count + " diretorios");
}
}
public static void copyFolder(File src, File dest) throws IOException {
if (src.isDirectory()) {
if (!dest.exists()) {
dest.mkdir();
System.out.println("Diretorio copiado de " + src + " para "
+ dest);
}
String files[] = src.list();
for (String file : files) {
File srcFile = new File(src, file);
File destFile = new File(dest, file);
copyFolder(srcFile, destFile);
}
} else {
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest);
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
in.close();
out.close();
System.out.println("Arquivo copiado de " + src + " para " + dest);
}
}
public void getAllFileBasedOnExtensions() throws IOException {
File dir = new File("D:\\");
String[] extensions = new String[] { "rar" };
List<File> files = (List<File>) FileUtils.listFiles(dir, extensions,
true);
int count = files.size();
if (count == 0) {
System.out.println("\nNão foi encontrado o arquivo ");
} else
for (File file : files) {
System.out.println("arquivo : " + file.getCanonicalPath());
}
System.out.println("\ntotal de arquivos .rar encontrados : " + count);
}
public static String getDirectory() {
return directory;
}
public static void setDirectory(String directory) {
SearchFiles.directory = directory;
}
public static String getFileName() {
return fileName;
}
public static void setFileName(String fileName) {
SearchFiles.fileName = fileName;
}
private LinkedList<String> resultado = new LinkedList<String>();
public String getSearchName() {
return searchName;
}
public void setSearchName(String searchName) {
this.searchName = searchName;
}
public LinkedList<String> getResultado() {
return resultado;
}
public void setResultado(LinkedList<String> resultado) {
this.resultado = resultado;
}
}
e o main :
import java.io.IOException;
import br.com.trocaversao.controller.SearchFiles;
public class Main {
@SuppressWarnings("static-access")
public static void main(String[] args) throws IOException {
SearchFiles search = new SearchFiles();
search.setDirectory("D:\\Aulas Java");
search.setFileName("CustomerManagerForWeb.war");
new SearchFiles().runSearchFile(search.getDirectory(), search.getFileName());
// search.getAllFileBasedOnExtensions();
}
}