2011-10-29 3 views
1

프로그램의 경우 디렉토리 트리를 만들려고합니다. 그래서 내 프로그램의 첫 번째 부분은 내가 필요한 디렉토리를 통과하는 경로를 사용디렉토리 트리 만들기

public static void main(String[] args) throws IOException { 
    Path startingDir = Paths.get("/home/somedirectory"); 
    PrintFiles pf = new PrintFiles(); 
    Files.walkFileTree(startingDir, pf); 

} 

그리고 PrintFiles 프로그램을 http://download.oracle.com/javase/tutorial/essential/io/walk.html (I 직접 나무를 산책 경로를 사용하는 방법에 대한 가이드에서이 복사) :

나는 또한 전형적인 추가 노드와 노드의 수와 트리를 생성하는 일반적인 트리 프로그램이

public static class PrintFiles extends SimpleFileVisitor<Path> { 

    //Print information about each type of file. 
    @Override 
    public FileVisitResult visitFile(Path file, BasicFileAttributes attr) { 
     if (attr.isSymbolicLink()) { 
      System.out.format("Symbolic link: %s ", file); 
     } else if (attr.isRegularFile()) { 
      System.out.format("Regular file: %s ", file); 
     } else { 
      System.out.format("Other: %s ", file); 
     } 
     System.out.println("(" + attr.size() + "bytes)"); 
     return CONTINUE; 
    } 

//Print each directory visited. 
    @Override 
    public FileVisitResult postVisitDirectory(Path dir, IOException exc) { 
     System.out.format("Directory: %s%n", dir); 
     return CONTINUE; 
    } 

    public FileVisitResult visitFileFailed(Path file, IOException exc) { 
     System.err.println(exc); 
     return CONTINUE; 
    } 

은} 나는 그것의 길이 I 때문에 코드를 게시하지 않을거야 (노드 등의 기능을 제거 그 이후로 정말로 필요하다고 생각하지 마라. 꽤 간단한 구현).

제 질문은 내 특정 디렉토리에 대한 디렉토리 트리를 나타내는 일반적인 트리를 만들 수있는 방법을 정확히 어떻게합니까? 경로와 파일 라이브러리가 어떻게 작동하는지 정확하게 알지 못합니다.

감사합니다, 케빈

+1

나는 아파치 commons io fileutils를 사용하여 dir을 걷는 것을 고려할 것이다 – jayunit100

답변

0

preVisitDirectory, postVisitDirectory and visitFile을 구현하기 위해 당신은해야합니다. 그리고 방문 구현에서 "현재 노드"를 유지해야합니다.

  • 사전에 새 노드를 만들에서 currentNode에 추가하고 visitFile에서 currentNode = newNode
  • 새로운 잎 노드를 생성하고 포스트에서 currentNode
  • 에 추가 설정은 그래서

currentNode = currentNode.getParent() 설정 당신이 preVisit에 "push"하고 postVisit에 "pop"과 같은 종류의 스택 연산과 비슷합니다.

+0

나는이 알고리즘이 어떻게 작동 하는지를 이해하지만, 정확히 어떻게이 각각의 함수를 호출 할 것인지를 제어한다. 예를 들어 전체 탐색은 walkFileTree 함수 내부에서 수행되므로이 ​​작업을 직접 구현해야합니까? – Matt

+0

FileVistor 인터페이스를 구현하고 해당 구현을 walkFileTree 함수에 전달하면됩니다. 그것은 걸어 다니며 적절한 지점에서 방문자 클래스를 호출합니다. –