2012-09-20 4 views
0

파일 및 해당 상위 디렉토리의 경로를 특정 디렉토리의 java에서 상위 디렉토리까지 가져야합니다.일부 파일 경로 만 포함하여 java의 디렉토리 및 하위 디렉토리에서 파일 나열

예를 들어, 내 방법에 경로가 주어진 경우 : /home/user/test 경로로 해당 디렉토리의 모든 파일 경로를 반환합니다.

그래서 /home/user/test는 하위 폴더가 있다면 : /subdir1/subdir2file1.txtfile2.txt를 포함하는 다음 방법의 결과는 /subdir1/file1.txt

/subdir2/file2.txt 그리고이 포함 된 2 문자열 것 subdir1은이라는 내부 디렉토리가 있다면 subsubdir 내부 그 file3.txt이면 그 파일을 위해 생성 된 문자열은 /subdir1/subsubdir/file3.txt이고 계속 될 하위 디렉토리가 더있을 것입니다.

아이디어는 파일 위의 디렉토리 경로를 원하지만 절대 경로가 아니라 초기 경로가 지정된 디렉토리 만 원하는 것입니다.

나는 조금 혼란 스럽지만 누군가가 그것을 이해할 수 있다고 확신합니다. 지금 당장 가지고있는 것은 파일 이름과 절대 경로를 출력하는 재귀 함수입니다.

이 문제에 대한 도움이 필요하십니까?

+0

* 부분 파일 경로 * 란 무엇을 의미합니까? 여기에 귀하의 게시물에 루트 상대'/ home/user/test'가 있습니다. – adatapost

+0

절대 경로가 있다면, 귀하의 디렉토리와 동일한 초기 부분을 잘라 버리십시오. '/ home/user/test /'부분을 잘라낸 후에'/ home/user/test/quick/brown/fox.txt'는'quick/brown/fox.txt'가됩니다. – dasblinkenlight

답변

2
당신이 뭔가를 시도하고 그것에 대해 질문을 했더라면 좋았을 것이다 무엇

...

를 인쇄 할 수 있습니다 그러나 ...

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<String> files = list(parentPath); 

     for (String file : files) { 
      System.out.println(file); 
     } 
    } 

    protected List<String> list(File parent) { 
     return listFiles(parent, parent); 
    } 

    protected List<String> listFiles(File parent, File folder) { 
     List<String> lstFiles = new ArrayList<String>(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; 
    } 
} 

당신은 단순히 파일의 목록과 접두사의 THEN 스트립을 반환, 일반 폴더 재귀를 할 수 있지만,이 찾은 각 파일에 대해 당신에게

0

"/ home/user/text"입력이있는 경우 파일의 절대 경로는 모두/home/user/text /로 시작합니다. 이미 text/아래에있는 모든 파일의 목록을 인쇄 할 수 있다면 적절한 하위 문자열을 가져 가면됩니다.

다음 함수는 pathToDir 아래의 모든 파일을 방문해야합니다. printFileName 기능, 당신은/홈/사용자/텍스트 부분을 제거하고 파일 이름

public static void gotoAllFiles(File pathToDir) { 
    if (pathToDir.isDirectory()) { 
     String[] subdirs = pathToDir.list(); 
     for (int i=0; i<subdirs.length; i++) { 
      gotoAllFiles(new File(pathToDir, subdirs[i])); 
     } 
    } else { 
     printFileName(pathToDir); 
    } 
} 
+0

좋아요, 문자열의 수를 지정하지 않고도 쉽게 구분할 수 있습니까?substring 함수는 int를 취하기 때문에 문자열의 길이가 길어지면 캐스팅으로 인해 문제가 발생하기 때문입니다. –

+0

문자열의 '개수'는 무엇을 의미합니까? 문자열의 길이가 거의 int 범위를 벗어나지 않습니다. longLength (int)를 안전하게 사용할 수 있습니다. – Osiris

0

, 인쇄 t 달려 그는

1

file.getAbsolutePath().substring(rootPath.length()); 현재 가지고있는 절대 경로를 사용하고 있지만 String.replace

를 사용에서 접두사를 제거하는 방법에 대한 당신은 당신이, 전체, 절대 경로를했다
다음 바로

을 전체 에 말을했다 무엇
String relative = full.replace(prefix, ""); 
관련 문제