JFileChooser escolher todos arquivos dentro de pastas e subpastas
7 respostas
vpmaciel1981
privatevoidjButton3_actionPerformed(ActionEvente){File[]files;finalJFileChooserchooser=newJFileChooser();finalFileNameExtensionFilterfilter=newFileNameExtensionFilter("Somente arquivos PHP","php");chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);chooser.setFileFilter(filter);finalintreturnVal=chooser.showDialog(null,"Escolher Pasta Raiz");if(returnVal==JFileChooser.APPROVE_OPTION){try{files=chooser.getSelectedFiles();}catch(finalExceptionioException){ioException.printStackTrace();}}else{}}
Como pegar todos os arquivos selecionando uma pasta raíz e dentro desta pasta raíz suas subpastas selecionar todos arquivos com extensão .php ?
privatevoidbtnPastaRaiz_actionPerformed(ActionEvente){finalJFileChooserchooser=newJFileChooser();chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);finalintreturnVal=chooser.showDialog(null,"Escolher Pasta Raiz");if(returnVal==JFileChooser.APPROVE_OPTION){try{fileOrigem=chooser.getSelectedFile().getAbsolutePath();fieldPastaRaiz.setText(chooser.getSelectedFile().getAbsolutePath());Pathdir=Paths.get(fileOrigem);try(DirectoryStream<Path>stream=Files.newDirectoryStream(dir)){for(Pathfile2:stream){System.out.println(file2.getFileName());}}catch(IOException|DirectoryIteratorExceptionx){// IOException can never be thrown by the iteration.// In this snippet, it can only be thrown by newDirectoryStream.System.err.println(x);}}catch(finalExceptionioException){ioException.printStackTrace();}}else{}}privatevoidbtnPastaSaida_actionPerformed(ActionEvente){finalJFileChooserchooser=newJFileChooser();chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);finalintreturnVal=chooser.showDialog(null,"Escolher Pasta de Saída");if(returnVal==JFileChooser.APPROVE_OPTION){try{fileDestino=chooser.getSelectedFile().getAbsolutePath();fieldPastaSaida.setText(chooser.getSelectedFile().getAbsolutePath());}catch(finalExceptionioException){ioException.printStackTrace();}}else{}}publicvoidcopiarArquivos(Pathorigem,Pathdestino)throwsIOException{// se é um diretório, tentamos criar. se já existir, não tem problema.if(Files.isDirectory(origem)){Files.createDirectories(destino);// listamos todas as entradas do diretórioDirectoryStream<Path>entradas=Files.newDirectoryStream(origem);for(Pathentrada:entradas){// para cada entrada, achamos o arquivo equivalente dentro de cada arvorePathnovaOrigem=origem.resolve(entrada.getFileName());PathnovoDestino=destino.resolve(entrada.getFileName());// invoca o metodo de maneira recursivacopiarArquivos(novaOrigem,novoDestino);}}else{// copiamos o arquivoFiles.copy(origem,destino);}}privatevoidbtnExecutar_actionPerformed(ActionEvente){Pathorigem=Paths.get(fileOrigem);Pathdestino=Paths.get(fileDestino);try{Files.walkFileTree(origem,newCopiadorDeArquivos(origem,destino));}catch(IOExceptionf){f.printStackTrace();}}
packagephpguard;importjava.io.IOException;importjava.nio.file.FileVisitResult;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.SimpleFileVisitor;importjava.nio.file.attribute.BasicFileAttributes;publicclassCopiadorDeArquivosextendsSimpleFileVisitor{privatePathorigem;privatePathdestino;publicCopiadorDeArquivos(Pathorigem,Pathdestino){this.origem=origem;this.destino=destino;}publicFileVisitResultpreVisitDirectory(Pathdir,BasicFileAttributesattrs)throwsIOException{copiaPath(dir);returnFileVisitResult.CONTINUE;}publicFileVisitResultvisitFile(Pathfile,BasicFileAttributesattrs)throwsIOException{copiaPath(file);returnFileVisitResult.CONTINUE;}privatevoidcopiaPath(Pathentrada)throwsIOException{// encontra o caminho equivalente na árvore de cópiaPathnovoDiretorio=destino.resolve(origem.relativize(entrada));Files.copy(entrada,novoDiretorio);}}
O código agora está assim, acho que vamos chegar lá bem rápido.