2012-01-29 2 views
2

전체 컴퓨터 시스템에서 파일을 검색하는 검색 유틸리티를 개발하면 Windows 플랫폼에서 제대로 작동하지만 우분투 리눅스에서는 무한한 프로세스가됩니다. 이 결함을 극복하는 데 도움주세요. 다음은 코드의 주요 부분입니다.자바 코드는 파일 시스템 전체를 검색하고 잘 작동하지만 우분투는 무한합니다

public static void fun(File f){ // root directory is passed as argument 
try{ 
    if(f.isDirectory()){ 
     File [] fi=f.listFiles(); 
     for(int i=0;i<fi.length;i++){ 
      if(fileFound==true) break; // fileFound is boolean data type used as flag to indicate whether the file is found or not 
      System.out.println(fi[i].getName()); 
      fun(fi[i]); 
     } 
    } 
    else{ 
     if(f.getName().equalsIgnoreCase(txtFile.getText()) || 
     (f.getName().toLowerCase().startsWith(txtFile.getText().toLowerCase())) ||  
     (f.getName().toLowerCase().endsWith(txtFile.getText().toLowerCase()))){  
      l.setText("file found " + f.getAbsolutePath()); // l is JLabel that indicated prints the info like file found and its path 
      fileFound=true; 
     } 
    } 
} 
catch(Exception e){ 
} 
} 
+0

는이 프로그램으로 인해 심볼릭 링크에 일부 순환 종속성을 입력하는 수 있습니까? 또한 빈 캐치를 제거하고 예외를 던지십시오 (어쩌면 랩핑 된). –

+0

"재미"라는 이름의 사람들에게 진지하게 말하지 마십시오. –

답변

3

"." (현재 디렉토리)와 ".."(위의 디렉토리)를 리눅스의 각 디렉토리에 저장합니다. 어쩌면 당신 문제입니다.

+0

power, wakeup, wakeup_count, wakeup_active_count, ...., runtime_status, control 등의 파일이 있습니다. 제어가이 파일에 도달하면 프로세스가 연속되어 무한이됩니다. – Rak

0

유닉스 계열 시스템에서 첫 번째 폴더는 "." (현재 폴더) 이고 두 번째 폴더는 ".."(루트 폴더)입니다.

같은 폴더에 반복적으로 나타나지 않도록 처음 2 개의 폴더를 건너 뛸 수 있습니다.

시도 :

if(fi[i].getName() == "." || fi[i].getName() == "..") 
    continue; 
+0

나는 이것을 시도했지만 작동하지 않는다. – Rak

+1

@ user1176616 : 문자열 비교를 위해'.equals()'메서드를 사용하는 것이 좋다. – Favonius

관련 문제