2010-07-29 10 views
3

아이디어는 단일 파일을 가져 오는 것이지만 모든 파일을 나열하고 싶지는 않습니다. 지정한 폴더의 주소는 있지만 이름은 아닙니다.Java의 폴더에서 단일 파일을 가져 오는 방법은 무엇입니까?

는 기본적으로 나는

을 원하는 임의의 파일 이름이나 폴더

에 생성 된 가장 오래된 파일이 사람이 지금까지 시도했습니다

findFileInFolder (문자열 폴더 이름) ---이 방법은이 일을 반환? 배열에있는 모든 파일을 나열하지 않고 첫 번째 파일을 가져 오는 모든 아이디어?


추가 :

나는 (내 영어 정말 미안 해요 내가 대단히 우세한 또는 공격적이 정말 내 의도하지 소리가 경우에 저를 용서해주세요..) 파일 명확하지 않았다 그냥 경우

인간에 의해 선택되지 않은,이 요청 또는 파일 이름

문자열 findFileInFolder (문자열 폴더 이름) 내가 언급처럼

문자열을 반환하는 방법을 제외하고 파일을 표시하지 않고 기계에 의해 선택되어이의 사용을위한 것입니다 램과 프로세서 때문에 :)


업데이트;입니다 보조 프로세스와 프로젝트의없는 차입니다, 그래서 읽어해야하는 경우 천은 상당히 내 프로젝트 :(

감사의 성능이 저하됩니다 파일 프로그램이 다른 컴퓨터에서 실행되고 있으므로 어떤 파일을 읽는 것이 "좋을"수없는 디렉토리에 액세스 할 수 있다면 좋을 것입니다. = D


희망 마지막 업데이트 : 나는 방법이 없다는 답변에 읽은 것을에서 너희들 :

을 귀찮게 죄송합니다. 제 질문은 배열을하는 대신 어떤 좋은 대안을 생각 하시겠습니까? 내 생각은 텍스트 파일에 인덱스를 만들고 첫 번째 줄만 사용하는 것입니다.

+0

파일을 배열로 읽은 다음 임의로 하나의 항목을 선택하는 것은 무엇이 문제입니까? 일반적으로 '임의의 파일 제공'을위한 파일 시스템 시스템 방법은 없으므로 어쨌든 배열로 읽어서 어떤 파일을 사용할 수 있는지 찾아야합니다. – relet

+0

actuall 문제는 없지만 ram에 대한 사용을 줄이려고합니다. 프로그램에이 섹션의 처리도 너무 적습니다. 1000 개가 넘는 파일을 가진 배열을 나열해야한다면 의미있는 번호 – Saikios

+0

If 당신은 디렉토리에 많은 파일을 기대하고, 당신은 java.nio.file.DirectoryStream을 볼 수있다. – relet

답변

1

이 코드를 사용하기로 결정했는데 정확히 원하는 것이 아니지만 지금은 작동합니다.

public static String getFileToCrawl(String directory){ 
     File dir = new File(directory); 

     String[] children = dir.list(); 
     if (children == null) { 
      return ""; 
     } else { 
      int i=0; 
      String filename = children[i]; 
      while (i<children.length && !filename.contains(".txt")){ 
       i++; 
       filename = children[i]; 
      } 
      return filename; 
     } 

    } 

그와 같은 사람이나 정말 환영있어이 코드를 개선 할 수있는 방법을 알고 있다면, 당신은 그것을 자유롭게 사용하려는 경우) : 여기에 D에게 내가 실현

1

당신은 당신이 예를 들어, 마지막 수정 날짜에 따라 파일을 필터링 할 수 있습니다이 방법을 사용 FileFilter 클래스와 public File[] listFiles(FileFilter filter)

에 모습을 가질 수 있습니다.

성능 문제 때문에 모든 파일을 나열하지 않으려는 이유는 무엇입니까?

0

현재 버전의 java에서는 모든 파일을 나열하고 필요한 것을 선택하는 것 외에는이를 수행 할 방법이 없습니다. Java 7을 사용할 수있는 경우 모든 파일을 나열하지 않고 폴더 트리를 이동할 수있는 FileVisitor 클래스가 있습니다.

+0

= 나는 (내가 할 수있는 다른 선택은 파일의 색인을 만들고 하나씩 지우는 것이지만, 그것은 내 생각이 아니었다. - – Saikios

+0

File.list() 성능에 대한 벤치 마크를 실행 한 적이 있습니까? 파일 이름 배열 만 반환하는 원시 메서드이므로 천 문자열이 아닙니다. 많이. –

+0

수천 그냥 뭔가 말했어, 그것은 아마도 더 많은 다른 프로세스와 컴퓨터가 동시에 실행되는거야, 나는 정보에 그것을 추가 할 것입니다 – Saikios

-1

를이 오래된 스레드 만이 빠르게 더러운 방법 :

import java.io.File; 
import java.util.Arrays; 
import java.util.Collections; 

public class Shuffle { 
    public static void main(String[] argv) 
    throws Exception { 

     File dir = new File("."); 
     String[] children = dir.list(); 
     Collections.shuffle(Arrays.asList(children)); 
     System.out.println(children[0]); 
    } 
} 
+1

이것은 정확히 OP의 질문에 * 반대 *입니다 그는 말합니다 : "모든 파일을 배열에 나열한 다음 첫 번째 파일을 가져 오는 것을 피하는 아이디어?" – b4hand

+0

폴더에서 임의의 파일을 선택하는 것 외에는 아무것도 표시하지 않습니다. –

+0

줄'String [] children = dir.list();'이리스트를하고있다. – b4hand

관련 문제