2013-03-18 2 views
1

cmd에있는 명령 줄에서 인수로 전달되는 디렉토리에있는 모든 파일과 하위 디렉토리를 표시하는 프로그램을 만들었습니다.
첫 번째 조건 (if (f.isDirectory())) 주어진 인자가 디렉토리인지 아닌지 확인하는 것은 잘 작동합니다.
그렇다면 dir_content = f.list() 인 File.list() 메서드를 사용하여 디렉토리의 모든 파일 이름 목록을 문자열 dir_content의 배열에 저장합니다.
그런 다음 for 루프에서 문자열 배열 dir_content에 저장된 각 파일 이름에 대해 새 파일 개체가 만들어 질 때마다 파일 f1 = new File (dir_content [i])을 만든 다음 파일이 있는지 확인합니다 if (f1.exists()) 인 exists() 메서드를 사용합니다.
이제는 f1.exists은 주어진 디렉토리에 존재 함에도 불구하고 많은 파일에 대해 false를 반환합니다. 몇 개의 파일을 표시하고 하위 디렉토리를 표시하지 않습니다.
다음은 내 프로그램의 코드입니다 : -file.exists() 메서드는 파일이 존재하더라도 false를 반환합니다.

import java.io.File; 
class FileDemo1 
{ 
public static void main(String[] a) 
{ 
    File f = new File(a[0]); 
    String[] dir_content; 

    if(f.isDirectory()) 
    { 
    System.out.print(f.getName()+" is a directory containing "); 
    dir_content = f.list(); 

    for(int i=0;i<dir_content.length;i++) 
    { 
     File f1 = new File(dir_content[i]); 
     if(f1.exists()) 
     { 
     System.out.print("\n\t: "+f1.getName()); 
     System.out.print(" "+f1.isFile()); 
     System.out.print(" "+f1.isDirectory()); 
     } 
    } 

    } 
} 
} 

누군가가 나에게 문제와 그 해결책 뒤에 이유를 알려주세요.
미리 감사드립니다.

+0

'dir_content = f.list(); '만약 응용 프로그램을. 'File' 인스턴스로 처리 할 때'String' 인스턴스로 p * ss 처리를하지 마십시오. 대신 ['File.listFiles()'] (http://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles%28%29)를 참조하십시오. –

답변

2

논리가 맞지만, File.list은 생각하는대로하지 않습니다. 이 파일 이름이 아닌 자신의 전체 경로의 목록을 returs, 그래서 당신은 같은 작업을 수행해야합니다 제대로 (당신의 지정된 디렉토리 내 파일 "은 File2.txt"를 원하는) 파일 경로를 만들 수

File f1 = new File(f,dir_content[i]); 

.

+0

['File.listFiles()'] (http://docs.oracle.com/javase/7/docs/api/java/io/File.html#listFiles%28%29)도 참조하십시오. –

+0

예, 작동합니다. 감사합니다. – user2181750

0

dir_content [i]는 디렉토리 이름 만 가지므로 File 객체를 구성 할 때 전체 경로가 아닌 디렉토리 이름 만 가지므로 false가 표시됩니다. 당신은 같은 것을 할 경우

그래서 그것은 당신에게 진실을 주어야한다 :

File f1 = new File(f.getPath() + dir_content[i]); ///f being a directory 
관련 문제