Listar arquivos de diretórios e sub-diretórios em java, incluindo apenas caminhos de arquivos parciais

Eu preciso obter os caminhos de arquivos e seus diretórios pai em java de um determinado diretório, mas não incluí-lo.

Então, por exemplo, se meu método receber o caminho: /home/user/test como um caminho, ele retornará os caminhos de todos os arquivos nesse diretório e abaixo dele.

Portanto, se /home/user/test tiver as subpastas: /subdir1 e /subdir2 contendo cada file1.txt e file2.txt , o resultado do método será 2 strings contendo /subdir1/file1.txt e /subdir2/file2.txt

E se subdir1 tivesse um diretório dentro dele chamado subsubdir e dentro daquele file3.txt , então a string criada para aquele arquivo seria /subdir1/subsubdir/file3.txt , e se houvesse subdiretórios adicionais que continuariam.

A idéia é que eu só quero os caminhos de diretório acima do arquivo, mas não o caminho absoluto, de modo que apenas os diretórios APÓS o caminho inicial dado.

Eu sei que é um pouco confuso, mas tenho certeza que alguém pode entender isso. Agora tudo que eu tenho é uma function recursiva que imprime nomes de arquivos e seus caminhos absolutos.

Alguma ajuda nisso?

O que teria sido bom se você tivesse tentado algo e fizesse perguntas sobre isso …

Contudo…

 public class TestFileSearch { /** * @param args the command line arguments */ public static void main(String[] args) { new TestFileSearch(); } public TestFileSearch() { File parentPath = new File("C:/Users/shane/Documents"); List files = list(parentPath); for (String file : files) { System.out.println(file); } } protected List list(File parent) { return listFiles(parent, parent); } protected List listFiles(File parent, File folder) { List lstFiles = new ArrayList(25); if (folder.isDirectory()) { File[] files = folder.listFiles(); if (files != null) { for (File file : files) { if (file.isDirectory()) { lstFiles.addAll(listFiles(parent, file)); } else { String path = file.getPath(); String offset = parent.getPath(); path = path.substring(offset.length()); lstFiles.add(path); } } } } return lstFiles; } } 

Você poderia simplesmente fazer uma recursion de pasta normal, retornando uma lista de arquivos e, em seguida, a tira do prefixo, mas isso é com você

Que tal usar o caminho absoluto que você tem atualmente, mas removendo o prefixo dele usando String.replace

Você disse que tinha o caminho completo e absoluto, digamos na íntegra
então apenas faça

 String relative = full.replace(prefix, ""); 

Se você tiver a input “/ home / user / text”, todos os caminhos absolutos para os arquivos começarão com / home / user / text /. Se você já conseguir imprimir uma lista de todos os arquivos em texto /, tudo o que você precisa fazer é obter a substring adequada.

A seguinte function deve visitar todos os arquivos em pathToDir. Na function printFileName, você pode remover a parte / home / user / text e imprimir os nomes dos arquivos

 public static void gotoAllFiles(File pathToDir) { if (pathToDir.isDirectory()) { String[] subdirs = pathToDir.list(); for (int i=0; i 

Para cada arquivo encontrado, imprima o file.getAbsolutePath().substring(rootPath.length());