'FileListEvent.DIRECTORY_LISTING'에 해당되는 글 2건

  1. 2008.12.09 파일을 불러오거나 저장하는 대화상자 열기
  2. 2008.12.09 대상 디렉토리 내용 읽어오기
AIR/파일시스템 연동2008. 12. 9. 19:06

FileReference()에 기본적으로 OS다이얼로그 창을 제공하는 메서드를 지원한다. player10 이후에는 FileReference()만으로 무비에 불러오고 로컬에 저장까지 가능하다.  
이러한 클래스를 상속받은 File()클래스는 같은 방법으로 로컬상의 파일을 불러오거나 저장을 할 수 있다.

* 다이얼로그 창 여는 메서드
File.browse() : 업로드할 파일을 선택할 수 있는 대화상자를 연다.
File.browseForDirectory() : 폴더를 선택하는 대화상자를 연다.
File.browseForOpen() : 파일을 오픈(불러오는)기능의 대화상자를 연다.
File.browseForOpenMultiple() : 여러개의 파일을 오픈(불러오는)기능의 대화상자를 연다.
File.browseForSave() : 파일을 저장하는 기능의 대화상자를 연다


이러한 메서드들을 호출하면 그림과 같은 대화상자(다이얼로그창)이 나타난다.

그림을 보면 파일형식에 images라고 적혀 있고 실제로 jpg, gif, png 등 이미지 파일만 보여지고 불러올 수 있다 .
이는 browserXXX( 이름 , 파일필터 )를 호출 할 때 대화상자 이름과 파일필터를 인수 값으로 설정할 수 있다. 대화상자의 이름은 문자열로 설정하며 파일필터는 FileFilter()를 담은 배열이나 단독적인 파일필터를 사용하여 설정한다. FileFilter()에 설정된 파일형태만 다이얼로그창에 표현할 수 있다. 단 로드하고자 하는 형태가 아닌 다른형태의 파일형태가 존재하고 해당 이름을 창에서 직접 입력하여 불러오면 무비속으로 불려 진다. 당연히 사용할 수 없는 포맷이므로 그냥 사용하지 말고 내부에서 확장자 검사를 다시 한번 하여 사용하는 예외처리를 하는 것을 잊지말자.

이처럼 File을 delegate한 객체에 Event.SELECT이벤트를 사용하면 어떠한 파일을 선택하였거나 저장시 저장할 파일을 선택 또는 생성 하였을 때  Select이벤트가 발생하며 리스너에서 처리하면 된다.

AIR에서는 FileListEvent라는 이벤트를 추가로 제공한다. browseForOpenMultiple() 호출을 통해 여러개의 파일을 선택하였을 때 객체에 FileListEvent.SELECT_MULTIPLE을 리스너로 등록하면 이벤트의 files에 배열 형태로 파일들이 저장되게 된다. 또한 FileListEvent.DIRECTORY_LISTING 역시 디렉토리에 포함된 내용을 배열에 등록하는 이벤트도 지원한다.


Posted by 버터백통
AIR/파일시스템 연동2008. 12. 9. 16:43

앞서 AIR의 File이라는 클래스를 통해 로컬디렉토리에 접근하는 방법을 공부하였다. 이번에는 File로 특정 디렉토리로 접근하여 대상 디렉토리에 존재하는 파일과 폴더정보를 읽어 오는 getDirectoryListingAsync()getDirectoryListing()를 살펴보도록 한다. 이 둘의 기능은 똑같지만 차이가 있다면 비동기 방식과 동기 방식밖에는 차이가 나질 않는다.

비동기식으로 대상 디렉토리의 내용을 읽어 올 때는 항상 FileListEvent.DIRECTORY_LISTING이벤트를 사용하여 이벤트의 files라는 속성으로 접근하여야 하는 점을 유의한다
동기식일 때는 try catch를 적절하게 사용하여야 하며 무비가 끊기지(멈추지) 않도록 신경을 써서 처리하여야 한다.

아래 코드는 윈도우 OS의 내문서 폴더에 있는 내용을 비동기식으로 읽어오는 테스트이다.
var documentDirectoryList:File = File.documentsDirectory;
documentDirectoryList.addEventListener( FileListEvent.DIRECTORY_LISTING , result );
documentDirectoryList.getDirectoryListingAsync()

function result( e:FileListEvent ):void
{
    for( var atrb:String in e.files  ){
     //내문서의 폴더와 파일 경로 읽어오기
     trace( atrb + "  : " + e.files[atrb].url)
    }
}

결과는 좀 지저분하지만 몇개 적는다면 아래와 같이 URL scheme로 출력해 보았다
0  : file:///C:/Documents%20and%20Settings/Administrator/My%20Documents/2%ed%8c%80_1%ed%8c%8c%ed%8a%b8_%ec%a3%bc%ea%b0%84%eb%b3%b4%ea%b3%a0_%ec%8a%a4%ec%bc%b8%ec%a5%b4(081204).xls
1  : file:///C:/Documents%20and%20Settings/Administrator/My%20Documents/AIR%20%ec%9d%b8%ec%a6%9d
2  : file:///C:/Documents%20and%20Settings/Administrator/My%20Documents/createDirectory
3  : file:///C:/Documents%20and%20Settings/Administrator/My%20Documents/DB.db3
4  : file:///C:/Documents%20and%20Settings/Administrator/My%20Documents/Downloads
5  : file:///C:/Documents%20and%20Settings/Administrator/My%20Documents/dxva_sig.txt
......

출력 결과물 0번과 1번의 초록색 부분을 보면 제일 뒤에 심하게 깨져(인코딩 되어)있는 것을 볼 수 있다. 이것은 한글 이름으로 정의된 폴더와 파일 이름이다.
Posted by 버터백통