Boas. Tou com uma duvida e gostava que alguem me ajudasse ou desse alguma dica.
Tenho o seguinte codigo que me lista os ficheiros de 1 directorio.
publicvoidListarFicheiros()throwsIOException{//BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));Stringlogin=in.readLine();System.out.println("login recebido no Listar Ficheiros: "+login);
O codigo recebe do socket um utilizador e vai listar todos os ficheiros da pasta principal do utilizador. Isto funciona 100%. A minha duvida é: quando tenho sub-directorios também gostaria que me lista-se os ficheiros, para tal precizo de uma função recursiva. Alguem me ajuda?
Obrigado
1 - Converta esse seu código em um método que receba o caminho do arquivo.
2 - Faça um if, verificando se o arquivo obtido é um diretório ( if ( file.isDirectory() ) )
3 - Caso seja um diretório, chame o método novamente, com o novo caminho ( caminhoAntigo+nomeDoArquivo).
Até mais!
E
emperor666
davidbuzatto:
1 - Converta esse seu código em um método que receba o caminho do arquivo.
2 - Faça um if, verificando se o arquivo obtido é um diretório ( if ( file.isDirectory() ) )
3 - Caso seja um diretório, chame o método novamente, com o novo caminho ( caminhoAntigo+nomeDoArquivo).
Até mais!
Viva.Tenhoquealterarestemetodo?PoisodirectorioquerecebeéologinatravesdesocketStringlogin=in.readLine();System.out.println("login recebido no Listar Ficheiros: "+login);
Queria que listas-se esse directorio e me devolves-se aqui nesta função, porque ele vai adicionar os ficheiros à lista de arquivos e devolver por socket ao cliente e retornar a uma interface da aplicação o resultado apresentando numa listbox.
Não tou a entender bem como vou conseguir implementar as suas dicas.
Não há forma de fazer uma função que continuasse a listar, mas para isso seria necessario enviar os ficheiros? e depois teria de guardar noutro ficheiro e adicionar aos arquivos?
T
thingol
Postei isto faz algum tempo, adapte para seu uso.
importjava.util.*;importjava.io.*;/*** Faz algo parecido com "dir /s *.html" (no caso Windows) ou* find . -name '*.html' -print (no caso Unix). * Cuidado: se houver um arquivo "XXX.HTML" (em maiúsculas) não vai* reconhecer, a menos que você explicite na expressão regular.*/classExemploDir{/** * @param startingDirectory O diretório inicial. * @param pattern Uma expressão regular que deve ser aplicada * ao nome do arquivo. */publicList<File>findFiles(finalFilestartingDirectory,finalStringpattern){List<File>files=newArrayList<File>();if(startingDirectory.isDirectory()){File[]sub=startingDirectory.listFiles(newFileFilter(){publicbooleanaccept(Filepathname){returnpathname.isDirectory()||pathname.getName().matches(pattern);}});for(FilefileDir:sub){if(fileDir.isDirectory()){files.addAll(findFiles(fileDir,pattern));}else{files.add(fileDir);// }}}returnfiles;}/** * */publicstaticvoidmain(String[]args){ExemploDired=newExemploDir();// Listando todos os arquivos "*.html"System.out.println(ed.findFiles(newFile("."),".*\.html"));// Listando todos os arquivos "*.java" ou "abs*.txt"System.out.println(ed.findFiles(newFile("."),"(.*\.java|abs.*\.txt)"));// Listando todos os arquivos "*.htm*" (incluindo arquivos *.HTM) - útil para WindowsSystem.out.println(ed.findFiles(newFile("."),"(?i).*\.htm[^.]*"));// Listando todos os arquivos "*.htm*" e "*.jsp" // (incluindo arquivos *.HTM e *.JSP) no diretório C:\INETPUB - útil para WindowsSystem.out.println(ed.findFiles(newFile("C:/INETPUB"),"(?i)(.*\.htm[^.]*|.*\.jsp)"));}}