Java diretórioderecursivoprocurar arquivos em
Java Aqui apresentamos um programa de exemplo que pesquisa recursivamente arquivos em um diretório especificado, incluindo subdiretórios, e obtém uma lista de arquivos que correspondem às condições de pesquisa.
Eles executam o mesmo processamento que o comando UNIX ls -R e o comando dir /s do Windows.
Você também pode especificar * como um caractere curinga no nome do arquivo a ser pesquisado ou usar expressões regulares para pesquisar.
Como exemplo de uso, no caso a seguir, o diretório filelist é pesquisado recursivamente incluindo subdiretórios para obter uma lista de arquivos com a extensão java.
Arquivo[] arquivos = search.listFiles(“C:/filelist/”, “*.java”);
programa de amostra
/**
*
*/
classe pública FileSearch {
público estático final int TYPE_FILE_OR_DIR = 1;
público estático final int TYPE_FILE = 2;
público estático final int TYPE_DIR = 3;
/**
* Do diretório especificado [directoryPath],
* Pesquise o arquivo [fileName] a ser pesquisado recursivamente e encontre o arquivo correspondente.
* Retorna uma lista de objetos de arquivo.
*
* exemplo)
* Arquivo[] arquivos =listaArquivos(“C:/listadearquivos/”, “*.java”);
* O exemplo acima pesquisa o diretório filelist recursivamente e
* Obtenha uma lista de arquivos com a extensão java.
*
* @param directoryPath Caminho que representa o diretório a ser pesquisado
* @param fileName Nome do arquivo a ser pesquisado
* Você pode especificar * como caractere curinga no nome do arquivo.
* @return Objeto de arquivo correspondente à pesquisa
*/
arquivo público[] listFiles(String caminhododiretório, String nomedoarquivo) {
// Converte * como caractere curinga em expressão regular
if (nomedoarquivo! = nulo) {
nomeArquivo = nomeArquivo.replace(“.”, “\\.”);
nomeArquivo = nomeArquivo.replace(“*”, “.*”);
}
return listFiles(directoryPath, fileName, TYPE_FILE, true, 0);
}
/**
* Do diretório especificado [directoryPath], especificado como uma expressão regular
* Pesquise recursivamente o arquivo a ser pesquisado [fileNamePattern],
* Retorna uma lista de objetos de arquivo aplicáveis.
*
* Você também pode usar a condição de pesquisa para determinar se a data de atualização do arquivo passou do número especificado de dias.
*Pode ser especificado.
*
* exemplo)
* Arquivo[] arquivos =
* listFiles(“C:/listadearquivos/”, “*.java”,TYPE_FILE, true, 2);
* No exemplo acima, a lista de arquivos do diretório é pesquisada recursivamente e atualizada há menos de 7 dias.
* Obtenha uma lista de arquivos com extensão java.
*
* @param directoryPath Caminho que representa o diretório a ser pesquisado
* @param fileNamePattern Nome do arquivo para pesquisar [expressão regular]
* @param type O objeto de arquivo correspondente é especificado por [type].
* O seguinte pode ser especificado
* TYPE_FILE_OR_DIR・・・Arquivo e diretório
* TYPE_FILE・・・Arquivo
* TYPE_DIR・・・Diretório
* @param isRecursive true para pesquisar recursivamente
* @param period Pesquisa arquivos cuja data de atualização ultrapassou o número especificado de dias.
* Pode ser definido se ou não
*Não aplicável se 0
* Se 1 ou mais, pesquise arquivos após o número especificado de dias
* Se for menor que -1, pesquisa arquivos anteriores ao número de dias especificado
* @return Objeto de arquivo correspondente à pesquisa
*/
arquivo público[] listFiles(String caminhododiretório,
String fileNamePattern, tipo int,
boolean isRecursivo, período interno) {
Dir do arquivo = novo arquivo(caminhododiretório);
if (!dir.isDirectory()) {
lança nova IllegalArgumentException
(“Caminho especificado no argumento[” + dir.getAbsolutePath() +
“] não é um diretório.”);
}
Arquivo[] arquivos = dir.listFiles();
// sua saída
for (int i = 0; i < arquivos.comprimento; i++) {
Arquivo arquivo = arquivos[i];
addFile(tipo, arquivoNomePattern, conjunto, arquivo, ponto final);
// Pesquisa recursivamente e adiciona à lista recursivamente se for um diretório
if (isRecursivo && arquivo.isDirectory()) {
listFiles(file.getAbsolutePath(), fileNamePattern,
tipo, isRecursivo, ponto final);
}
}
return (Arquivo[]) set.toArray(new Arquivo[set.size()]);
}
private void addFile (tipo int, correspondência de string, conjunto TreeSet,
Arquivo arquivo, período inteiro) {
interruptor (tipo) {
caso TYPE_FILE:
if (!file.isFile()) {
retornar;
}
quebrar;
caso TYPE_DIR:
if (!file.isDirectory()) {
retornar;
}
quebrar;
}
if (correspondência! = nulo &&! arquivo.getName().correspondência (correspondência)) {
retornar;
}
// Se houver uma especificação se o número especificado de dias se passou
se (ponto final! = 0) {
//Data de atualização do arquivo
Data lastModifiedDate = new Date(file.lastModified());
String lastModifiedDateStr = new SimpleDateFormat(“aaaaMMdd”)
.format(últimaDataModificada);
//Data especificada (calculada em milissegundos por dia)
longo oneDayTime = 24L * 60L * 60L * 1000L;
longo períodoTime = oneDayTime * Math.abs(período);
Data designadaData =
nova Data(System.currentTimeMillis() – períodoTime);
String designadaDateStr = new SimpleDateFormat(“aaaaMMdd”)
.formato(datadesignada);
if (período > 0) {
if (lastModifiedDateStr.compareTo(designatedDateStr) < 0) {
retornar;
}
} outro {
if (lastModifiedDateStr.compareTo(designatedDateStr) > 0) {
retornar;
}
}
}
// Armazena na lista se todas as condições forem atendidas
set.add(arquivo);
}
/** Use TreeSet para classificar em ordem alfabética. */
conjunto TreeSet privado = new TreeSet();
/**
* Se quiser continuar usando a instância após criá-la, use este método.
* A chamada deve ser cancelada.
* exemplo)
* Pesquisa FileSearch = new FileSearch();
* Arquivo[] f1 = search.listFiles(C:/filelist/”, “*.java”);
*pesquisar.claro();
* Arquivo[] f2 = search.listFiles(“C:/filelist/”, “*.jsp”);
*/
público vazio claro(){
set.clear();
}
}
Resultado da execução
Para verificar o programa de exemplo, criei um diretório filelist e preparei os seguintes arquivos.
O nome do arquivo e a data de atualização são exibidos.
*Observe que a data atual é2007/08/18Suponha que sim.
C:\filelist │ aaa.java 2007/08/18 │ bbb.java 2007/08/18 └─dir ccc.java 2007/07/17 ddd.java 2007/08/18 eee.jpg 2007/08/16
◆Exemplo de execução
System.out.println(“\n●Obter todos os arquivos”);
Arquivo[] arquivos = search.listFiles(caminho, null);
printFileList(arquivos);
pesquisa.claro();
System.out.println(“\n●Obter arquivo com extensão java”);
arquivos = search.listFiles(caminho, “*.java”);
printFileList(arquivos);
pesquisa.claro();
System.out.println(“\n●Obter todos os arquivos e diretórios”);
arquivos = search.listFiles (caminho, nulo, search.TYPE_FILE_OR_DIR, verdadeiro, 0);
printFileList(arquivos);
pesquisa.claro();
System.out.println(“\n●Obter arquivos atualizados dentro de 2 dias a partir da data atual”);
arquivos = search.listFiles (caminho, nulo, search.TYPE_FILE, verdadeiro, 2);
printFileList(arquivos);
pesquisa.claro();
System.out.println(“\n●Obter arquivos antigos com mais de 30 dias da data atual”);
arquivos = search.listFiles (caminho, nulo, search.TYPE_FILE, verdadeiro, -30);
printFileList(arquivos);
pesquisa.claro();
}
private static void printFileList(Arquivo[] arquivos) {
for (int i = 0; i < arquivos.comprimento; i++) {
Arquivo arquivo = arquivos[i];
System.out.println((i + 1) + “: ” + arquivo);
}
}
◆Resultado de saída
●Obtenha todos os arquivos 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ccc.java 4: C:\filelist\dir\ddd.java 5: C:\filelist\dir\eee.jpg ●Obter arquivos com extensão java 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ccc .java 4: C:\filelist\dir\ddd.java ●Obter todos os arquivos e diretórios 1: C:\filelist\aaa.java 2: C:\filelist\bbb.java 3: C:\filelist\dir 4: C:\filelist \dir\ccc.java 5: C:\filelist\dir\ddd.java 6: C:\filelist\dir\eee.jpg ●Arquivos atualizados dentro de 2 dias a partir da data atual Obtenha 1: C:\filelist\aaa. java 2: C:\filelist\bbb.java 3: C:\filelist\dir\ddd.java 4: C:\filelist\dir\eee.jpg ●Data atual Obtenha arquivos antigos com mais de 30 dias a partir de 1: C: \lista de arquivos\dir\ccc.java