2015-03-26 4 views
0

Как бы вы проследовали через дерево файловой системы с учетом узла, который по сути является корневым узлом? Поскольку это итерация, единственными двумя методами, которые я должен определить, является hasNext() и next(). Я знаю, что мне нужно использовать listFiles(), isDirectory() и exists(), но я не уверен, как их реализовать. Я НЕ хочу никакого кода, но мне просто хотелось бы, чтобы кто-то мог дать мне некоторое представление о том, как я буду делать hasNext() или next(). Еще раз спасибо за любую помощь!Итерация через дерево файловой системы java

+0

Вы можете посмотреть на гуавы-х [fileTreeTraverser] (http://docs.guava-libraries.googlecode.com/git/javadoc/src-html/com/google/common/ io/Files.html # line.803), который предоставляет различные итераторы деревьев [здесь] (http://docs.guava-libraries.googlecode.com/git/javadoc/src-html/com/google/common/collect/ TreeTra verser.html # line.54). –

+0

Взгляните на http://stackoverflow.com/a/6006609/2891664 (используйте стек или список). – Radiodef

ответ

0

хорошо в первом вы могли бы определить функцию как

listrecursive(Element e) 

который получает элемент. если этот элемент является каталогом, вы вызываете функцию listrecurisive для каждого из элементов в этом каталоге. Конечно, чтобы перебрать все элементы, которые вы можете использовать итератор, т.е.

function listrecursive(Element e){ 
if(e isDirectory){ 
    Iterator iter = e.iterator(); 
     while(iter.hasNext()){ 
      Element ie = iter.next(); 
      listRecursive(ie); 
    } 
} 
else{ 
//process file 
} 
} 

SRY, но я должен был включать в себя какой-то код ... по крайней мере, он не будет работать, я обещаю ;-)

+0

жаль, что я забыл упомянуть, нет рекурсии :( – dzagnyr

0

Я думаю, рекурсия будет лучший матч:

private void getDirectoryStructure(String rootNode) { 
    List<String> fileList = new LinkedList<String>(); 
    getSubDirectories(new File(rootNode), fileList); 
    // fileList got the data you need 
} 

public static void getSubDirectories(File rootNode, List<String> fileList){ 
    if(rootNode.isDirectory()){ 
     fileList.add(rootNode.getAbsolutePath()); 
     File[] subDirectory = rootNode.listFiles(); 
     for(File sub : subDirectory){ 
      getSubDirectories(sub, fileList); 
     } 
    } 
} 
Смежные вопросы