2014-12-01 2 views
1

컴파일 할 때 오류가 발생하지 않지만 메소드의 ArrayList<File>이 주를 차지하지 않습니다.ArrayList를 <file> return java

모든 항목이 FoldersArrayList에 추가되었지만 기본 방법으로 전달되지 않습니다. 프로세스를 실행할 때

public static ArrayList<File> Process(File aFile) 
{ 
    ArrayList<File> Folders = new ArrayList<File>(); 

    if(aFile.isFile()) 
    { 
    String filenom = aFile.getPath(); 
    if (filenom.toLowerCase().endsWith(".java")){ 
     Folders.add(aFile); 
    } 
    } 
    else if (aFile.isDirectory()) { 
    File[] listOfFiles = aFile.listFiles(); 
    if(listOfFiles!=null) { 
     for (int i = 0; i < listOfFiles.length; i++) 
      Process(listOfFiles[i]); 
    } 
    else { 
     System.out.println(" [ACCESS DENIED]"); 
    } 
    }  
    return (Folders); 
} 

public static void main(String[] args) throws IOException 
{ 
    ArrayList<File> FAddress = new ArrayList<File>(); 
    File dir = new File("C:/"); 
    FAddress = Process(dir); 
    if (FAddress.isEmpty()) 
    System.out.println("WTF?!"); 
    else{ 
    for (File fl : FAddress) { 
     String FileAddress = fl.getName(); 
     System.out.println(FileAddress); 
    } 
    } 
} 

답변

1

당신은 모든 시간에

ArrayList<File> Folders = new ArrayList<File>(); 

을 만들 수 있습니다. 이 함수는 재귀가 있으므로 C :/폴더에서 시작하기 때문에이 배열을 업데이트하지 않습니다. 당신은 파일 트리의 과정을 여러 단계를 필요로하는 경우이 유용 할 것이다

public static ArrayList<File> Process(File aFile) { 
    ArrayList<File> Folders = new ArrayList<File>(); 
    Process(aFile, Folders); 
    return folders; 
} 

private static void Process(File aFile, ArrayList<File> Folders) { 
    ... //your implementation without defining Folders and returning it 
} 

:

정확한 처리를 위해 당신은 같은 것을 사용한다. (Folders)

for (int i = 0; i < listOfFiles.length; i++) 
    Process(listOfFiles[i]); 

하지만 당신은 반환 값에 그 결과를 추가하는 것을 잊었다 : 당신은 제대로 File 객체가 디렉토리인지 여부를 식별하고, 그 위에 Process 전화 -

2

문제는 재귀 함께 그래서 하위 디렉토리에서 어떤 결과가 반환 값에 추가되지 않습니다 :

for (int i = 0; i < listOfFiles.length; i++) 
    Folders.addAll(Process(listOfFiles[i])); 
1

당신은 static ArrayList<File> Folders = new ArrayList<File>(); 변수 클래스 레벨을 정의하고 다음 파일을 채우는 동일하게 사용할 수 있습니다.

import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 

public class test { 
    static ArrayList<File> Folders = new ArrayList<File>(); 
    public static void Process(File aFile) { 


     if (aFile.isFile()) { 
      String filenom = aFile.getPath(); 
      if (filenom.toLowerCase().endsWith(".log")) { 
       Folders.add(aFile); 
      } 
     } else if (aFile.isDirectory()) { 
      File[] listOfFiles = aFile.listFiles(); 
      if (listOfFiles != null) { 
       for (int i = 0; i < listOfFiles.length; i++) 
        Process(listOfFiles[i]); 
      } else { 
       System.out.println(" [ACCESS DENIED]"); 
      } 
     } 
    } 

    public static void main(String[] args) throws IOException { 
     File dir = new File("C:/ukba/"); 
     Process(dir); 
     if (Folders.isEmpty()) 
      System.out.println("WTF?!"); 
     else { 
      for (File fl : Folders) { 
       String FileAddress = fl.getName(); 
       System.out.println(FileAddress); 
      } 
     } 
     Folders = null; 
    } 
} 
관련 문제