개발신의 한타

[안드로이드] 안드로이드 파일,폴더 검색 (소스) 본문

안드로이드/개발소스

[안드로이드] 안드로이드 파일,폴더 검색 (소스)

슈퍼맨28호 2014. 1. 13. 18:04

 안드로이드 :: 특정 파일, 폴더 검색하기

특정한 단어를 포함하는 파일이나 폴더, 특정한 확장자를 가진 파일,폴더를 검색하려면 어떻게 해야 할까요?
이러한 기능을 만드는 방법은 크게 두가지를 생각해 볼수 있습니다.

1. 모든 파일에 접근하여 하나 하나 검색어와 비교해 본다.
2. FileFilter(또는 Filename Filter)를 이용하여 파일을 검색한다.

쉽게 생각하면 FileFilter를 이용하는게 당연해 보이지만, 기능을 만들다 보면 모든 파일에 직접 접근하여 검색해야 하는 경우도 존재합니다. 아래에서 실제로 한번 간단한 구현을 해봅시다. 

1. 모든 파일에 접근하여 비교하기.

시간이 걸린다는 단점이 존재하지만, 원하는대로 할수 있는 자유도가 가장 높습니다. 아래 예는 zip파일을 찾는 경우를 보여줍니다.
다르게 활용한다면 특정 폴더를 매개변수로 받아서 폴더안의 모드 파일을 자유롭게 처리할수 있습니다.


public void searchAllFile(File fileList){
      FIle[] list = fileList.listFiles();

      if(list==null)
            return;
      for(File file : list){
           
if(file.isDirectory()){      // 폴더인가?
                  // ... 폴더 일때 할일
           
}
            // Example : zip 파일을 찾을때
            if(file.getName().endWith(".zip"){
                  // ... zip 파일일때 할일
            }
     
}
}

 

2. FilenameFilter 사용하기

FilenameFilter를 Override하여 특정 검색결과를 받을수 있습니다. 아래의 예는 zip파일을 찾는 경우를 보여줍니다. 
오버라이드된 accept함수의 두가지의 인수(경로, 파일이름)을 활용하여 자유롭게 비교분석이 가능합니다.


public File[] searchbyFileFilter(File fileList){
      File[] resultList = fileList.listFiles( new FilenameFilter(){
                  @Override
                  public boolean accept(File path, String fileName){
                        return fileName.endsWith("zip");
                  }

      });
      return resultList;
}


이와 유사하게 FileFilter를 사용할수도 있는데 그 경우에는 인수로서 path만을 가지게 됩니다.
물론 path의 제일끝에도 파일명이 붙어 있기 때문에, 그 부분을 추출하여 파일명으로 비교분석하면 되지만,
굳이 두번 작업할 필요는 없으므로 위와 같은 방법을 많이 사용하게 됩니다.
디렉토리만 찾는 경우(파일이름이 굳이 필요없는 경우)라면 FileFilter를 이용하는게 조금더 도움이 되겠지요.

 

 

'안드로이드 > 개발소스' 카테고리의 다른 글

[안드로이드] 부팅시 자동실행  (0) 2014.01.21