2013-03-18 6 views
18

현재 디렉토리의 파일을 나열 할 수 있기를 원합니다. 작동해야하지만 모든 파일 이름을 반환하지는 않는 무언가를 만들었습니다.현재 디렉토리의 파일을 나열하는 방법은 무엇입니까?

File dir = new File("."); 
File[] filesList = dir.listFiles(); 
for (File file : filesList) { 
    if (file.isFile()) { 
     System.out.println(file.getName()); 
    } 
} 

.classpath을 반환하지만,이 폴더에는 다른 java 파일이있을 것입니다. 어쩌면 현재 폴더의 점 표기법이 잘못 되었습니까?

+1

* * (그들에게 우리가 할 수의 이름을 "나는이 폴더 안에 다른 자바 파일이 꽤 확신한다" 더 확신하십시오). –

+1

코드와 출력에 아무런 문제가 보이지 않습니다. – Maroun

+0

Windows의 경우 dir 또는 UNIX의 경우 ls와 같은 비교 도구 목록을 제공하여 비교하십시오. – Ingo

답변

8

현재 폴더의 점 표기법이 잘못되었을 수 있습니까?

경로를 확인하려면 File.getCanonicalFile()의 결과를 인쇄하십시오.

왜 현재 src가 아닌지 내게 설명 할 수 있습니까?

IDE는 JVM을 호출 할 때 클래스 경로를 설정합니다.

E.G. (Netbeans에 도달) 메뉴를 선택하는 경우 File | Project Properties (all classes)과 유사한 것을 볼 수 있습니다 :

Netbeans project options

이 여기에 관심있는 Working Directory입니다.

1

당신이 가리키는 생각하는 경우 당신은 new File(".") 정말 가리키고 있는지 확인해야합니다 - .classpath 일부 Eclipse 프로젝트의 루트를 제안합니다 ....

+11

* "해야합니다 .."*이 내용을 주석으로 작성해야합니다. –

17

폴더 및 하위 폴더 내의 모든 파일을 검색하려면이 시도

public static void main(String[]args) 
    { 
     File curDir = new File("."); 
     getAllFiles(curDir); 
    } 
    private static void getAllFiles(File curDir) { 

     File[] filesList = curDir.listFiles(); 
     for(File f : filesList){ 
      if(f.isDirectory()) 
       getAllFiles(f); 
      if(f.isFile()){ 
       System.out.println(f.getName()); 
      } 
     } 

    } 

파일/폴더에만

public static void main(String[]args) 
    { 
     File curDir = new File("."); 
     getAllFiles(curDir); 
    } 
    private static void getAllFiles(File curDir) { 

     File[] filesList = curDir.listFiles(); 
     for(File f : filesList){ 
      if(f.isDirectory()) 
       System.out.println(f.getName()); 
      if(f.isFile()){ 
       System.out.println(f.getName()); 
      } 
     } 

    } 
+0

여기 나는 사용자가'현재 디렉토리'에있는 모든 파일을 인쇄하고 싶다고 말하고있는 것 같습니다. 하위 디렉토리에도 없습니다 !! –

+0

고마워요 ... – saman

1

를 검색하려면이 하나 주위에 빠른 스눕을했다, 그러나 이것은 쉬 그것과 같다 ould 작업. 나는 아직 그것을 테스트하지 않았다.

File f = new File("."); // current directory 

    File[] files = f.listFiles(); 
    for (File file : files) { 
     if (file.isDirectory()) { 
      System.out.print("directory:"); 
     } else { 
      System.out.print("  file:"); 
     } 
     System.out.println(file.getCanonicalPath()); 
    } 
0

코드에 아무런 문제가 없습니다. 지명 된 디렉토리에 직접 포함 된 모든 파일과 디렉토리를 나열해야합니다.

  • "." 디렉토리가 당신이 될 기대되지 않습니다 :

    문제는 다음 중 하나 가능성이 높습니다. "." 경로명은 실제로 JVM의 "현재 디렉토리"또는 "작업 디렉토리"를 의미합니다. 을 인쇄하여 실제로 "." 디렉토리를 확인할 수 있습니다.

  • 무엇이 오해합니까? dir.listFiles()가 반환합니다. 트리의 모든 객체를 반환하지 않습니다. dir. 그것은 단지 dir에있는 객체 (파일, 디렉토리, 심볼릭 링크 등) 만 반환합니다.

".classpath" 파일은 이클립스 프로젝트 디렉토리에서 찾고있는 것을 제안하고, Eclipse 프로젝트는 "./src" 같은 하위 디렉토리에있는 자바 파일로 구성 일반적으로이다. "." 디렉토리에 Java 소스 코드가 표시 될 것으로 기대하지는 않습니다.


SRC는 현재 폴더 수없는 이유를 누군가가 나에게 설명 할 수 있습니까? "

프로젝트로 현재 폴더를 다음 기본값를 이클립스에서 응용 프로그램을 실행된다고 가정 실행기 구성 마법사의 패널 중 하나를 통해 기본 현재 디렉토리를 변경할 수 있습니다.

+0

repost 내 다른 의견, "내가 문제를 발견했을 수도 있습니다. 나는 현재 디렉토리가 src 폴더 (이클립스)에 있다고 생각하지만 사실은 점 표기법은 src 외부의 폴더를 가리킨다. 그러나 src 폴더는 내 파일을 저장하는 폴더입니다. 따라서 현재 폴더라고 가정 했으므로 아무도 src가 현재 폴더가 아닌 이유를 설명 할 수 있습니까? " – Martynogea

0

코드를 컴파일하고 독립 실행 형으로 실행하면 예상 결과가 나타납니다. 명령 행). 기본적으로 각 프로젝트에 대한 일식과 마찬가지로 작업 디렉토리는 프로젝트 디렉토리이므로이 결과를 얻는 이유입니다.다음은 예상되는 결과를 줄 것이다

System.setProperty("user.dir", "absolute path of src folder"); 

:

당신은 자바으로 user.dir 속성을 설정할 수 있습니다.

+0

음 ...이 작동하지 않습니다. 순수 Java에서'new File (".")이 의미하는 바를 변경할 방법이 없습니다. –

+0

참조 : http://stackoverflow.com/questions/840190/changing-the-current-working-directory-in-java –

0

이 답변을 내 로컬 디렉토리 (예 : E://)와 함께 사용하면 첫 번째 디렉토리에는 잘 작동하고 두 번째 디렉토리에는 출력이 Java null 포인터 예외로 만들어졌으며 그 이유를 찾은 후 숨겨진 디렉토리에 의해 만들어,이 디렉토리는 사용이 문제를 방지하려면 Windows에서 을 만든이

public void recursiveSearch(File file) { 
File[] filesList = file.listFiles(); 
    for (File f : filesList) { 
     if (f.isDirectory() && !f.isHidden()) { 
      System.out.println("Directoy name is -------------->" + f.getName()); 
      recursiveSearch(f); 
     } 
     if(f.isFile()){ 
      System.out.println("File name is -------------->" + f.getName()); 
     } 
    } 
}