2013-01-14 1 views
0

내가해야 할 일은 사용자로부터 파일을 검색하고 검색 할 파일 이름의 일부인 사용자로부터 문자 집합을 가져 오는 것입니다. 일단 파일이 발견되면 전체 파일 이름과 함께 하위 폴더를 포함한 모든 위치를 표시합니다. 주어진 경로의 모든 파일을 가져 와서 파일에 넣습니다. 을 사용하여 파일 [ 배열] ListFiles(). 모든 파일의 이름을 가져와 arraylist에 저장하십시오. 다른 arraylist를 만들고 이전 arraylist의 확장자없이 파일 이름 만 저장하십시오. 그런 다음 사용자가 입력 한 문자 집합을 사용하여이 arraylist의 각 파일 이름과 비교합니다.이 작업이 제대로 작동하는지 테스트하려면 인쇄 된 파일 이름뿐 아니라 사용자가 입력 한 문자 집합과 일치하는 파일 이름을 모두 인쇄하십시오. . 여기 내 코드는 다음과 같습니다.Arraylist and files

import java.util.*; 
import java.io.*; 

public class FileSearch 
{ 
    public static void main(String args[]) 
    { 
    try 
    { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println(" 1.Enter the path to search:"); 
     String str = br.readLine(); 
     System.out.println(" 2.Enter some characters of the filename:"); 
     String str1 = br.readLine(); 

     File files = new File(str); 

     File[] f = files.listFiles();  

     List<String> li = new ArrayList<String>(); 
     List<String> li1 = new ArrayList<String>(); 

     for(int i=0;i<f.length;i++) 
     { 
      if(f[i].isFile()) 
      { 
       li.add(f[i].getName()); 
      } 
     } 

     for(int i=0;i<li.size();i++) 
     { 
      int j = li.get(i).lastIndexOf('.'); 
      li1.add((j>-1)?li.get(i).substring(0, j):li.get(i)); 
     } 

     for(int i=0;i<li1.size();i++) 
     { 
      if(li1.get(i).contains(str1)); 
      { 
       System.out.println(li1.get(i)); 
      } 
     } 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
    } 
} 
+0

정확히 일치합니다. 확장자가없는 li1 arraylist의 내용을 인쇄하고 있습니다. 무엇을하기 위해 노력하고 있습니까? – Joel

+0

코드가 내게 맞는 것 같습니다. str1의 가치는 확실합니까? 디버거로 걸어가보십시오. – Joel

+2

그냥 디버그하십시오. 도움이 필요한 경우 : [Eclipse Tutorial] (http://www.vogella.com/articles/EclipseDebugging/article.html) – moeTi

답변

2

코드는 아주 좋습니다. 다음 문은 문제의 근본 원인입니다.

if(li1.get(i).contains(str1)); 
{ 
    System.out.println(li1.get(i)); 
} 

분명히 관찰 한 경우 if 조건 뒤에 ;을 사용했습니다. 코드가 잘 작동 할 세미 콜론을 제거하십시오.

+0

젠장. 많이 감사합니다. 내 바보 같은 Dx – Robin

+1

기분 나빠하지 마. 그 오류는 한 번에 또는 다른 모든 사람을 얻었습니다. 이클립스를 사용한다면 컴파일러 경고를 할 수있다. http://stackoverflow.com/questions/7571007/compiler-doesnt-complain-when-i-ended-a-line-with-two-semicolons-why를 참조하십시오. – Tansir1

2

여기를보십시오 article. 프로그램을 디버깅하는 방법을 이해하는 데 도움이됩니다. 다음과 같이 전체 경로를 구성 할 수 있습니다.

String fullPath = files.getAbsolutePath() + li1.get(i); 
+0

@JoelThanks 많이 :)하지만 이제는 그 파일 이름이 arraylist. 전체 파일 경로를 출력해야합니다. 지금은 문자열이기 때문에 어떻게 할 수 있습니까? – Robin

+0

어디에도 내선 번호를 저장 하시겠습니까? 그렇다면 문자열 연결을 사용하여 그들을 인쇄 할 수있는 하나의 문자열로 결합 할 수 있습니다. – Joel

+1

String fullPath = files.getAbsolutePath() + li1.get (i); – Joel