Tomando o diretório d:/a como exemplo, assumindo que a estrutura no diretório d:/a é a seguinte:
d:/a | --a.sql |--back.log |--b | | --e | |--1.txt | | --2.txt | | --3.txt | `--f | | --4.txt | | --5.txt | `--6.txt |--c | | --e | | --ACE1.txt | | --ACE2.txt | | --ACE3.txt | `--f | | --4.txt | | --5.txt | `--6.txt`--d | --a.java | --abc (1) .txt | --abc (2) .txt | --abc (3) .txt |--b.java` ---c.java
4.1 Exemplo 1: Liste arquivos em todo o diretório (recursivo)
Ideias:
1.Transfere o diretório d:/a.
2. Toda vez que você atravessa um diretório em d:/a, itera sobre este subdiretório. Portanto, é necessário determinar se cada elemento atravessado é um diretório.
Aqui estão alguns dos códigos do código normal para o código recursivo:
Arquivo dir = novo arquivo ("d:/a"); arquivo [] file_list = dir.ListFiles (); para (Lista de arquivos: file_list) {if (list.isDirectory ()) {arquivo dir_1 = list.listfiles (); // O código começa aqui e pode ser recursivo logicamente infinitamente se (DIR_1.isDirectory ()) {....}} else {System.out.println (list.getabsolutepath ()); }}As peças de código repetidas são encapsuladas, portanto o método recursivo é usado para encapsular o código e resolver o problema recursivo infinito. O código final é o seguinte:
importar java.io. System.out.println ("dir ------>"+dir.getabsolutepath ()); listall (dir); } public static void listAll (arquivo dir) {file [] file_list = DIR.ListFiles (); para (arquivo de arquivo: file_list) {if (file.isdirectory ()) {system.out.println ("dir ------>"+file.getabsolutepath ()); listall (arquivo); } else {System.out.println ("arquivo ------->"+file.getabsolutepath ()); }}}}4.2 Exemplo 2: Arquivos de lista (fila) em todo o diretório
Ideias:
1. Itera sobre o diretório fornecido. Coloque o nome do diretório que você atravessou na coleção.
2. Itreate sobre cada elemento de diretório da coleção e adicione os subdiretos atravessados à coleção. Finalmente, exclua -o da coleção após cada travessia.
3. Dessa forma, enquanto o diretório for encontrado, ele continuará atravessando até que um determinado diretório seja atravessado e o próximo diretório no mesmo nível começará a atravessar.
O que considerar é que tipo de coleção usar. Primeiro de tudo, os elementos do diretório da coleção não precisam ser classificados e os nomes do subdiretório em diferentes diretórios podem ser repetidos. Portanto, a coleção de listas é usada em vez da coleção de conjuntos. Como os elementos são frequentemente adicionados e excluídos, a lista vinculada em vez da coleção Arraylist é usada. A característica mais proeminente da coleção LinkedList é a fila FIFO.
Comparado à travessia recursiva, a vantagem de usar filas para atravessar o diretório é que os elementos são colocados em contêineres e todos estão em memória de heap, dificultando a transbordamento da memória.
importar java.util.*; Importar java.io. Fila <File> file_queue = nova fila <File> (); // Construa um arquivo de fila [] list = Dir.ListFiles (); para (arquivo de arquivo: list) {// Transule o diretório de nível superior if (file.isdirectory ()) {System.out.println ("dir ----->"+file.getabsolutepath ()); file_queue.add (arquivo); } else {System.out.println ("arquivo ------>"+file.getabsolutepath ()); }} while (! file_queue.isnull ()) {// Inicie a partir do subdiretório secundário, Traverse File Subdirs = file_queue.get (); // Primeiro, obtenha o arquivo de nome do subdiretório secundário [] subfiles = subdirs.listfiles (); para (subdir de arquivo: subfiles) {// transtraight cada subdiretório de nível próximo if (subdir.isdirectory ()) {System.out.println ("dir ------>"+subdir.getabsolutepath ()); file_queue.add (subdir); // Se houver um subdiretório na camada interna, adicione à fila} else {System.out.println ("arquivo ------->"+subdir.getabsolutepath ()); }}}}}}}}} classe fila <e> {private LinkedList <E> LinkedList; Queue () {LinkedList = new LinkedList <E> (); } public void add (e e) {linkedlist.addfirst (e); // avançado} public e get () {return linkedlist.removelt (); // primeiro out} public boolean isNull () {return linkedlist.isempty (); }}4.3 Exemplo 3: A estrutura da árvore exibe arquivos em todo o diretório (recursivo)
Ideias:
1. Liste primeiro os diretórios e arquivos de primeiro nível.
2. Se for um diretório, adicione um símbolo de prefixo que forma uma forma de árvore. Em seguida, itera através deste diretório, que requer travessia recursiva.
importar java.io. System.out.println (Dir.getName ()); ListChilds (dir, 1); } public static void listChilds (arquivo f, int nível) {string prefix = ""; for (int i = 0; i <nível; i ++) {prefix = "|"+prefixo; } Arquivo [] arquivos = f.listfiles (); para (arquivo de arquivo: arquivos) {if (file.isdirectory ()) {system.out.println (prefix + file.getName ()); listChilds (arquivo, nível+1); } else {System.out.println (prefix + file.getName ()); }}}}Os resultados são os seguintes:
a | a.sql | b | | e | | 1.txt | | | 2.txt | | | 3.txt | | f | | 4.txt | | | 5.txt | | | 6.txt | back.log | c | | e | | | ACE1.txt | | | ACE2.txt | | | ACE3.txt | | f | | | 4.txt | | | 5.txt | | | 6.txt | d | | A.Java | | ABC (1) .txt | | ABC (2) .txt | | ABC (3) .txt | | B.Java | | C.Java
4.4 Exclua todo o diretório
importar java.io. rm (arquivo); } public static void rm (arquivo f) {if (! f.exists ()) {System.out.println ("arquivo não encontrado!"); retornar; } else if (f.isfile ()) {f.Delete (); retornar; } Arquivo [] dir = f.listfiles (); para (arquivo de arquivo: dir) {rm (arquivo); } f.Delete (); }}Resumir
O acima exposto é a lista de arquivos do diretório de exibição Java e o diretório excluído introduzido pelo editor. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!