AIR의 File 객체 작업

Adobe AIR 1.0 이상

File 객체는 파일 시스템에 있는 파일 또는 디렉토리에 대한 포인터입니다.

File 클래스는 FileReference 클래스를 확장합니다. AIR은 물론 Adobe® Flash® Player에서도 사용할 수 있는 FileReference 클래스는 파일에 대한 포인터를 나타내지만 File 클래스는 보안 문제로 인해 Flash Player(브라우저에서 실행 중인 SWF)에서 노출되지 않는 속성 및 메서드를 추가합니다.

File 클래스

다음과 같은 작업에 File 클래스를 사용할 수 있습니다.

  • 사용자 디렉토리, 사용자의 문서 디렉토리, 응용 프로그램이 시작된 디렉토리 및 응용 프로그램 디렉토리와 같은 특수 디렉토리에 대한 경로 가져오기

  • 파일 및 디렉토리 복사

  • 파일 및 디렉토리 이동

  • 파일 및 디렉토리 삭제(또는 휴지통으로 이동)

  • 디렉토리에 포함된 파일 및 디렉토리 나열

  • 임시 파일 및 폴더 만들기

File 객체가 파일 경로를 가리키면 FileStream 클래스를 사용하여 파일 데이터를 읽고 쓸 수 있습니다.

File 객체가 아직 없는 파일이나 디렉토리의 경로를 가리킬 수 있습니다. 파일이나 디렉토리를 만들 때 이러한 File 객체를 사용할 수 있습니다.

File 객체의 경로

각 File 객체에는 각각 해당 경로를 지정하는 두 개의 속성이 있습니다.

속성

설명

nativePath

파일에 대한 플랫폼별 경로를 지정합니다. 예를 들어 Windows의 경우 경로는 "c:\Sample directory\test.txt"일 수 있는 반면 Mac OS에서는 "/Sample directory/test.txt"일 수 있습니다. nativePath 속성은 디렉토리 분리 기호 문자로 Windows에서는 백슬래시(\) 문자를 사용하고 Mac OS 및 Linux에서는 슬래시(/) 문자를 사용합니다.

url

이 속성은 파일 URL 스킴을 사용하여 파일을 가리킬 수 있습니다. 예를 들어 Windows의 경우 경로는 "file:///c:/Sample%20directory/test.txt"일 수 있는 반면 Mac OS에서는 "file:///Sample%20directory/test.txt"일 수 있습니다. 런타임에는 file 외에도 다른 특수 URL 스킴이 포함되어 있으며 이에 대해서는 지원되는 AIR URL 스킴에서 설명합니다.

File 클래스에는 Mac OS, Windows 및 Linux의 표준 디렉토리를 가리키기 위한 다음과 같은 정적 속성이 포함되어 있습니다.

  • File.applicationStorageDirectory — 설치된 각 AIR 응용 프로그램에 고유한 저장소 디렉토리. 이 디렉토리는 동적 응용 프로그램 에셋 및 사용자 환경 설정을 저장하는 데 적합한 장소입니다. 대용량의 데이터는 다른 장소에 저장하는 것이 좋습니다.

    Android에서 응용 프로그램 저장소 디렉토리는 해당 응용 프로그램이 제거되거나 사용자가 응용 프로그램 데이터를 지우는 경우 제거되지만 다른 플랫폼에서는 그렇지 않습니다.

  • File.applicationDirectory - 응용 프로그램이 설치된 디렉토리(설치되어 있는 모든 에셋 포함). 일부 운영 체제에서 응용 프로그램은 실제 디렉토리가 아닌 단일 패키지 파일에 저장됩니다. 이 경우 해당 내용은 기본 경로를 통해 액세스할 수 없으며 응용 프로그램 디렉토리는 읽기 전용이 됩니다.

  • File.desktopDirectory - 사용자 데스크톱 디렉토리. 플랫폼에서 데스크톱 디렉토리를 정의하지 않는 경우 파일 시스템의 다른 위치가 사용됩니다.

  • File.documentsDirectory - 사용자 문서 디렉토리. 플랫폼에서 문서 디렉토리를 정의하지 않는 경우 파일 시스템의 다른 위치가 사용됩니다.

  • File.userDirectory — 사용자 디렉토리. 플랫폼에서 사용자 디렉토리를 정의하지 않는 경우 파일 시스템의 다른 위치가 사용됩니다.

참고: 플랫폼에서 데스크톱, 문서 또는 사용자 디렉토리에 대한 표준 위치를 정의하지 않는 경우 File.documentsDirectory, File.desktopDirectoryFile.userDirectory는 서로 같은 디렉토리를 참조할 수 있습니다.

이러한 속성들은 운영 체제에 따라 다양한 값을 갖습니다. 예를 들어 Mac 및 Windows는 사용자 데스크톱 디렉토리의 기본 경로가 각각 다릅니다. 그러나 File.desktopDirectory 속성은 모든 플랫폼에서 적합한 디렉토리 경로를 가리킵니다. 여러 플랫폼에 걸쳐 작동하는 응용 프로그램에 쓰기를 수행하려면 이러한 속성에 기반하여 해당 응용 프로그램에서 사용하는 다른 디렉토리와 파일을 참조할 수 있습니다. 그런 다음 resolvePath() 메서드를 사용하여 경로를 세부적으로 지정하십시오. 예를 들어 이 코드는 아래의 응용 프로그램 저장소 디렉토리에서 preferences.xml 파일을 가리킵니다.

var prefsFile:File = File.applicationStorageDirectory; 
prefsFile = prefsFile.resolvePath("preferences.xml");

File 클래스를 통해 특정 파일 경로를 가리킬 수 있지만 그렇게 하면 응용 프로그램을 서로 다른 플랫폼에 걸쳐 사용하지 못할 수 있습니다. 예를 들어 C:\Documents and Settings\joe\와 같은 경로는 Windows 운영 체제에서만 사용할 수 있습니다. 이러한 경우를 피하기 위해 File.documentsDirectory 같은 File 클래스의 정적 속성을 사용하는 것이 좋습니다.

공통 디렉토리 위치

플랫폼

디렉토리 유형

일반적인 파일 시스템 위치

Android

응용 프로그램

/data/data/

응용 프로그램 저장소

/data/data/air.applicationID/filename/Local Store

데스크톱

/mnt/sdcard

문서

/mnt/sdcard

임시

/data/data/applicationID/cache/FlashTmp.randomString

사용자

/mnt/sdcard

Linux

응용 프로그램

/opt/filename/share

응용 프로그램 저장소

/home/userName/.appdata/applicationID/Local Store

데스크톱

/home/userName/Desktop

문서

/home/userName/Documents

임시

/tmp/FlashTmp.randomString

사용자

/home/userName

Mac

응용 프로그램

/Applications/filename.app/Contents/Resources

응용 프로그램 저장소

/Users/userName/Library/Preferences/applicationID/Local Store

데스크톱

/Users/userName/Desktop

문서

/Users/userName/Documents

임시

/private/var/folders/JY/randomString/TemporaryItems/FlashTmp

사용자

/Users/userName

Windows

응용 프로그램

C:\Program Files\filename

응용 프로그램 저장소

C:\Documents and settings\userName\ApplicationData\applicationID\Local Store

데스크톱

C:\Documents and settings\userName\Desktop

문서

C:\Documents and settings\userName\My Documents

임시

C:\Documents and settings\userName\Local Settings\Temp\randomString.tmp

사용자

C:\Documents and settings\userName

이러한 디렉토리의 실제 기본 경로는 운영 체제 및 컴퓨터 구성에 따라 다릅니다. 이 표에 나온 경로는 일반적인 예일 뿐입니다. 응용 프로그램이 모든 플랫폼에서 제대로 작동하려면 항상 적합한 정적 File 클래스 속성을 사용하여 이러한 디렉토리를 참조해야 합니다. 실제 AIR 응용 프로그램에서 위 표에 나온 applicationIDfilename의 값은 응용 프로그램 설명자로부터 가져 옵니다. 응용 프로그램 설명자에서 제작자 ID를 지정하면 해당 제작자 ID는 이와 같은 경로의 응용 프로그램 ID에 추가됩니다. userName의 값은 설치를 실행한 사용자의 계정 이름입니다.

TV용 AIR 응용 프로그램의 디렉토리 보기

TV용 AIR 장치의 시스템 파일에 보안을 제공하기 위해 AIR 응용 프로그램은 제한된 디렉토리 집합에만 액세스할 수 있습니다. TV용 AIR에서 응용 프로그램은 그 밖의 다른 디렉토리에 액세스할 수 없습니다. 또한 TV용 AIR에서 각 AIR 응용 프로그램에 대한 각 사용자별 데이터는 서로 격리되어 있습니다.

AIR 응용 프로그램은 ActionScript 3.0에서만 사용할 수 있는 디렉토리 이름을 사용합니다. 이 이름은 장치상의 실제 디렉토리를 나타내지 않습니다. TV용 AIR는 이러한 ActionScript 3.0 디렉토리 이름을 실제 장치 디렉토리에 매핑합니다. 이러한 매핑은 TV용 AIR 응용 프로그램이 해당 응용 프로그램에 속하지 않는 로컬 파일에 악의적으로 또는 실수로 액세스하는 것을 방지합니다.

ActionScript 3.0 디렉토리 이름은 다음과 같습니다.

/app/
실행 중인 AIR 응용 프로그램을 위한 읽기 전용 응용 프로그램 디렉토리

/app-storage/
실행 중인 AIR 응용 프로그램을 위한 읽기/쓰기 응용 프로그램 저장소 디렉토리

/home/
읽기/쓰기 사용자 디렉토리

/tmp/
실행 중인 AIR 응용 프로그램을 위한 읽기/쓰기 임시 디렉토리

/volumes/
마운트된 볼륨을 나타내는 읽기/쓰기 하위 디렉토리가 0개 이상 포함된 읽기 전용 디렉토리

응용 프로그램에서 금지된 디렉토리에 액세스하려고 하면 런타임에 ActionScript 코드가 Catch할 수 있는 예외가 발생합니다.

다음 표는 다양한 File 속성 및 메서드의 File.nativePath 값을 보여 줍니다. 각 값은 응용 프로그램이 장치의 파일 시스템에서 제한적으로 볼 수 있는 디렉토리를 나타냅니다.

File 속성 또는 메서드

File.nativePath

매핑 정보

applicationDirectory

/app/

응용 프로그램별 디렉토리에 매핑

applicationStorageDirectory

/app-storage/

사용자별 디렉토리 안의 응용 프로그램별 디렉토리에 매핑

desktopDirectory

/home/

사용자별 디렉토리 안의 응용 프로그램별 디렉토리에 매핑. userDirectorydocumentsDirectory와 동일한 디렉토리

userDirectory

/home/

사용자별 디렉토리 안의 응용 프로그램별 디렉토리에 매핑. desktopDirectorydocumentsDirectory와 동일한 디렉토리

documentsDirectory

/home/

사용자별 디렉토리 안의 응용 프로그램별 디렉토리에 매핑. userDirectorydesktopDirectory와 동일한 디렉토리

createTempDirectory()

/tmp/

임시 디렉토리에 매핑. TV용 AIR는 AIR 응용 프로그램이 존재하는 경우 이 디렉토리와 그 내용을 삭제합니다.

또한 TV용 AIR 장치에서 다음 메서드의 비헤이비어를 알아 두십시오.

  • File.createTempFile()/tmp/ 디렉토리에 파일을 만듭니다.

  • File.getRootDirectories() — 한 개의 File 객체와 함께 배열을 반환합니다. File 객체의 nativePath 속성은 / 값을 갖습니다. 이 루트 디렉토리에는 app, app-storage, hometmp 디렉토리가 포함됩니다.

  • StorageVolumeInfo.storageVolumeInfo.getStorageVolumes() — StorageVolume 객체의 Vector를 반환합니다. 각 StorageVolume 객체의 rootDirectory 속성은 File 객체입니다. File 객체의 nativePath 값은 /volumes/로 시작됩니다. 모든 응용 프로그램 및 사용자는 /volumes/ 디렉토리에 액세스할 수 있습니다.

File 객체로 디렉토리 가리키기

디렉토리를 가리키도록 File 객체를 설정하는 여러 방법이 있습니다.

사용자 홈 디렉토리 가리키기

File 객체로 사용자 홈 디렉토리를 가리킬 수 있습니다. 다음 코드에서는 홈 디렉토리의 AIR Test 하위 디렉토리를 가리키도록 File 객체를 설정합니다.

var file:File = File.userDirectory.resolvePath("AIR Test"); 

사용자 문서 디렉토리 가리키기

File 객체로 사용자 문서 디렉토리를 가리킬 수 있습니다. 다음 코드에서는 문서 디렉토리의 AIR Test 하위 디렉토리를 가리키도록 File 객체를 설정합니다.

var file:File = File.documentsDirectory.resolvePath("AIR Test");

바탕 화면 디렉토리 가리키기

File 객체로 바탕 화면을 가리킬 수 있습니다. 다음 코드에서는 바탕 화면의 AIR Test 하위 디렉토리를 가리키도록 File 객체를 설정합니다.

var file:File = File.desktopDirectory.resolvePath("AIR Test");

응용 프로그램 저장소 디렉토리 가리키기

File 객체로 응용 프로그램 저장소 디렉토리를 가리킬 수 있습니다. 모든 AIR 응용 프로그램에 대해 응용 프로그램 저장소 디렉토리를 정의하는 연결된 고유한 경로가 있습니다. 이 디렉토리는 각 응용 프로그램 및 사용자에 대해 고유합니다. 이 디렉토리에는 사용자별, 응용 프로그램별 데이터(예: 사용자 데이터 또는 환경 설정 파일)를 저장할 수 있습니다. 예를 들어 다음 코드에서는 File 객체로 응용 프로그램 저장소에 포함된 환경 설정 파일 prefs.xml을 가리킵니다.

var file:File = File.applicationStorageDirectory; 
file = file.resolvePath("prefs.xml");

일반적으로 응용 프로그램 저장소 디렉토리 위치는 사용자 이름 및 응용 프로그램 ID에 따라 결정됩니다. 다음 파일 시스템 위치는 응용 프로그램을 디버그하는 데 도움이 됩니다. 이러한 디렉토리의 파일을 확인하려면 항상 File.applicationStorage 속성 또는 app-storage: URI 스킴을 사용해야 합니다.

  • Mac OS의 경우:

    /Users/user name/Library/Preferences/applicationID/Local Store/

    예를 들면 다음과 같습니다.

    /Users/babbage/Library/Preferences/com.example.TestApp/Local Store
  • Windows의 경우 Documents and Settings 디렉토리에서:

    C:\Documents and Settings\user name\Application Data\applicationID\Local Store\

    예를 들면 다음과 같습니다.

    C:\Documents and Settings\babbage\Application Data\com.example.TestApp\Local Store
  • Linux의 경우:

    /home/user name/.appdata/applicationID/Local Store/

    예를 들면 다음과 같습니다.

    /home/babbage/.appdata/com.example.TestApp/Local Store
  • Android의 경우:

    /data/data/androidPackageID/applicationID/Local Store

    예를 들면 다음과 같습니다.

    /data/data/air.com.example.TestApp/com.example.TestApp/Local Store
  • TV용 AIR 장치에서의 위치는 TV용 AIR 응용 프로그램의 디렉토리 보기에 설명되어 있습니다.

참고: 응용 프로그램에 제작자 ID가 있는 경우 해당 제작자 ID는 응용 프로그램 저장소 디렉토리 경로의 일부로도 사용됩니다.

File.applicationStorageDirectory로 만든 File 객체의 URL(및 url 속성)에서는 다음과 같이 app-storage URL 스킴을 사용합니다. 자세한 내용은 지원되는 AIR URL 스킴을 참조하십시오.

var dir:File = File.applicationStorageDirectory; 
dir = dir.resolvePath("preferences"); 
trace(dir.url); // app-storage:/preferences

응용 프로그램 디렉토리 가리키기

File 객체로 응용 프로그램이 설치된 디렉토리(응용 프로그램 디렉토리라고 함)를 가리킬 수 있습니다. File.applicationDirectory 속성을 사용하여 이 디렉토리를 참조할 수 있습니다. 이 디렉토리를 사용하여 응용 프로그램과 함께 설치되는 응용 프로그램 설명자 파일이나 기타 리소스를 검토할 수 있습니다. 예를 들어 다음 코드에서는 File 객체로 응용 프로그램 디렉토리에 있는 images라는 디렉토리를 가리킵니다.

var dir:File = File.applicationDirectory; 
dir = dir.resolvePath("images"); 

File.applicationDirectory로 만든 File 객체의 URL(및 url 속성)에서는 다음과 같이 app URL 스킴을 사용합니다. 자세한 내용은 지원되는 AIR URL 스킴을 참조하십시오.

var dir:File = File.applicationDirectory; 
dir = dir.resolvePath("images"); 
trace(dir.url); // app:/images
참고: Android에서 응용 프로그램 패키지의 파일은 nativePath를 통해서 액세스할 수 없습니다. nativePath 속성이 빈 문자열입니다. 응용 프로그램 디렉토리에 있는 파일에 액세스하려면 기본 경로가 아니라 항상 URL을 사용해야 합니다.

파일 시스템 루트 가리키기

File.getRootDirectories() 메서드는 Windows 컴퓨터에서 C: 및 마운트된 볼륨과 같은 모든 루트 볼륨을 나열합니다. Mac OS 및 Linux에서 이 메서드는 항상 시스템의 고유한 루트 디렉토리("/" 디렉토리)를 반환합니다. StorageVolumeInfo.getStorageVolumes() 메서드는 마운트된 저장소 볼륨에 대해 보다 자세한 정보를 제공합니다(저장소 볼륨을 사용한 작업 참조).

참고: Android에서 파일 시스템의 루트는 읽을 수 없습니다. 디렉토리를 참조하는 File 객체와 함께 기본 경로 '/'가 반환되지만 해당 객체의 속성은 정확한 값을 갖지 않습니다. 예를 들어 spaceAvailable은 항상 0입니다.

명시적 디렉토리 가리키기

다음 예제(Windows의 경우)와 같이 File 객체의 nativePath 속성을 설정하여 File 객체로 명시적 디렉토리를 가리킬 수 있습니다.

var file:File = new File(); 
file.nativePath = "C:\\AIR Test";

중요: 이 방법으로 명시적 경로를 가리킬 경우 특정 플랫폼에만 사용할 수 있는 코드가 작성될 수 있습니다. 예를 들어 위 예제는 Windows에서만 사용할 수 있습니다. File 객체의 정적 속성(예: File.applicationStorageDirectory)를 이용하면 플랫폼에 관계없이 사용할 수 있는 디렉토리를 찾을 수 있습니다. 그런 다음 resolvePath() 메서드(다음 단원 참조)를 사용하여 상대 경로로 이동합니다.

상대 경로 탐색

resolvePath() 메서드를 사용하여 지정된 다른 경로에 상대적인 경로를 가져올 수 있습니다. 예를 들어 다음 코드에서는 사용자 홈 디렉토리의 "AIR Test" 하위 디렉토리를 가리키도록 File 객체를 설정합니다.

var file:File = File.userDirectory; 
file = file.resolvePath("AIR Test");

또한 File 객체의 url 속성을 사용하여 다음과 같이 URL 문자열을 기반으로 디렉토리를 가리킬 수 있습니다.

var urlStr:String = "file:///C:/AIR Test/"; 
var file:File = new File() 
file.url = urlStr; 

자세한 내용은 File 경로 수정을 참조하십시오.

사용자가 디렉토리를 찾아 선택할 수 있도록 설정

File 클래스에는 사용자가 객체에 할당할 디렉토리를 선택할 수 있는 시스템 대화 상자를 표시하는 browseForDirectory() 메서드가 포함되어 있습니다. browseForDirectory() 메서드는 비동기적입니다. 이 메서드는 사용자가 디렉토리를 선택하고 [열기] 버튼을 클릭하는 경우 select 이벤트를 전달하거나 [취소] 버튼을 클릭하는 경우 cancel 이벤트를 전달합니다.

예를 들어 다음 코드에서는 사용자가 디렉토리를 선택할 수 있게 하고 경로 선택 시 디렉토리 경로를 출력합니다.

var file:File = new File(); 
file.addEventListener(Event.SELECT, dirSelected); 
file.browseForDirectory("Select a directory"); 
function dirSelected(e:Event):void { 
    trace(file.nativePath); 
}
참고: Android에서 browseForDirectory() 메서드는 지원되지 않습니다. 이 메서드를 호출해도 아무런 효과가 없으며 즉시 cancel 이벤트가 전달됩니다. 사용자가 디렉토리를 선택할 수 있도록 하려면 사용자 정의를 통해 응용 프로그램에서 정의되는 대화 상자를 사용해야 합니다.

응용 프로그램이 호출된 디렉토리 가리키기

응용 프로그램이 호출될 때 전달된 InvokeEvent 객체의 currentDirectory 속성을 확인하여 응용 프로그램이 호출된 디렉토리 위치를 가져올 수 있습니다. 자세한 내용은 명령줄 인수 캡처를 참조하십시오.

File 객체로 파일 가리키기

File 객체가 가리키는 파일을 설정하는 여러 방법이 있습니다.

명시적 파일 경로 가리키기

중요: 명시적 경로를 가리킬 경우 특정 플랫폼에만 사용할 수 있는 코드가 작성될 수 있습니다. 예를 들어 C:/foo.txt와 같은 경로는 Windows에서만 사용할 수 있습니다. File 객체의 정적 속성(예: File.applicationStorageDirectory)를 이용하면 플랫폼에 관계없이 사용할 수 있는 디렉토리를 찾을 수 있습니다. 그런 다음 resolvePath() 메서드(File 경로 수정 참조)를 사용하여 상대 경로로 이동합니다.

다음과 같이 File 객체의 url 속성을 사용하여 URL 문자열을 기반으로 파일 또는 디렉토리를 가리킬 수 있습니다.

var urlStr:String = "file:///C:/AIR Test/test.txt"; 
var file:File = new File() 
file.url = urlStr; 

또한 다음과 같이 File() 생성자 함수에 URL을 전달할 수도 있습니다.

var urlStr:String = "file:///C:/AIR Test/test.txt"; 
var file:File = new File(urlStr); 

url 속성은 항상 URI로 인코딩된 버전의 URL(예: 공백을 "%20으로 대체)을 반환합니다.

file.url = "file:///c:/AIR Test"; 
trace(file.url); // file:///c:/AIR%20Test 

또한 File 객체의 nativePath 속성을 사용하여 명시적 경로를 설정할 수도 있습니다. 예를 들어 다음 코드는 Windows가 설치된 컴퓨터에서 실행할 경우 File 객체를 C: 드라이브의 AIR Test 하위 디렉토리에 있는 test.txt 파일로 설정합니다.

var file:File = new File(); 
file.nativePath = "C:/AIR Test/test.txt"; 

또한 다음과 같이 이 경로를 File() 생성자 함수에 전달할 수도 있습니다.

var file:File = new File("C:/AIR Test/test.txt"); 

슬래시(/) 문자를 nativePath 속성의 경로 구분 기호로 사용합니다. Windows의 경우 백슬래시(\) 문자를 사용할 수도 있지만 그렇게 하면 응용 프로그램을 서로 다른 플랫폼에 걸쳐 사용하지 못할 수 있습니다.

자세한 내용은 File 경로 수정을 참조하십시오.

디렉토리의 파일 열거

File 객체의 getDirectoryListing() 메서드를 사용하여 디렉토리 루트 레벨의 파일 및 하위 디렉토리를 가리키는 File 객체 배열을 가져올 수 있습니다. 자세한 내용은 디렉토리 열거를 참조하십시오.

사용자가 파일을 찾아 선택할 수 있도록 설정

File 클래스에는 사용자가 객체에 할당할 파일을 선택할 수 있는 시스템 대화 상자를 표시하는 다음 메서드가 포함되어 있습니다.

  • browseForOpen()

  • browseForSave()

  • browseForOpenMultiple()

이러한 각각의 메서드는 비동기적입니다. browseForOpen()browseForSave() 메서드는 사용자가 파일(또는 browseForSave()의 경우 대상 경로)을 선택하면 select 이벤트를 전달합니다. browseForOpen()browseForSave() 메서드에서는 대상 File 객체 선택 시 선택한 파일을 가리킵니다. browseForOpenMultiple() 메서드는 사용자가 파일을 선택할 때 selectMultiple 이벤트를 전달합니다. selectMultiple 이벤트는 FileListEvent 유형이며 선택한 파일을 가리키는 File 객체 배열인 files 속성을 갖습니다.

예를 들어 다음 코드에서는 사용자가 파일을 선택할 수 있는 [열기] 대화 상자를 표시합니다.

var fileToOpen:File = File.documentsDirectory; 
selectTextFile(fileToOpen); 
 
function selectTextFile(root:File):void 
{ 
    var txtFilter:FileFilter = new FileFilter("Text", "*.as;*.css;*.html;*.txt;*.xml"); 
    root.browseForOpen("Open", [txtFilter]); 
    root.addEventListener(Event.SELECT, fileSelected); 
} 
 
function fileSelected(event:Event):void 
{ 
    trace(fileToOpen.nativePath); 
} 

browse 메서드를 호출할 때 응용 프로그램에 다른 브라우저 대화 상자가 열러 있는 경우 런타임에서 Error 예외가 발생합니다.

File 경로 수정

또한 다음 예제와 같이 resolvePath() 메서드를 호출하거나 객체의 nativePath 또는 url 속성을 수정하여 기존 File 객체의 경로를 수정할 수도 있습니다(Windows의 경우).

var file1:File = File.documentsDirectory; 
file1 = file1.resolvePath("AIR Test"); 
trace(file1.nativePath); // C:\Documents and Settings\userName\My Documents\AIR Test 
var file2:File = File.documentsDirectory; 
file2 = file2.resolvePath(".."); 
trace(file2.nativePath); // C:\Documents and Settings\userName 
var file3:File = File.documentsDirectory; 
file3.nativePath += "/subdirectory"; 
trace(file3.nativePath); // C:\Documents and Settings\userName\My Documents\subdirectory 
var file4:File = new File(); 
file4.url = "file:///c:/AIR Test/test.txt"; 
trace(file4.nativePath); // C:\AIR Test\test.txt 

nativePath 속성을 사용할 때는 슬래시(/) 문자를 디렉토리 분리 기호 문자로 사용합니다. Windows의 경우 백슬래시(\) 문자를 사용할 수도 있지만, 특정 플랫폼에서만 사용할 수 있는 코드가 작성될 수 있으므로 권장되지 않습니다.

지원되는 AIR URL 스킴

AIR에서는 다음과 같은 URL 스킴을 사용하여 File 객체의 url 속성을 정의할 수 있습니다.

URL 스킴

설명

file

파일 시스템의 루트에 상대적인 경로를 지정하는 데 사용합니다. 예를 들면 다음과 같습니다.

file:///c:/AIR Test/test.txt

URL 표준에서는 file URL이 file://<호스트>/<경로>의 형태를 가지도록 지정합니다. 특별한 경우 <호스트>가 빈 문자열일 수 있는데, 이 경우 "URL이 해석되고 있는 시스템"으로 해석됩니다. 이 때문에 file URL에는 세 개의 슬래시(///)가 있는 경우가 종종 있습니다.

app

설치된 응용 프로그램의 루트 디렉토리(설치된 응용 프로그램의 application.xml 파일이 포함된 디렉토리)에 대해 상대적인 경로를 지정하는 데 사용합니다. 예를 들어 다음 경로는 설치된 응용 프로그램의 images 하위 디렉토리를 가리킵니다.

app:/images

app-storage

응용 프로그램 저장소 디렉토리에 상대적인 경로를 지정하는 데 사용합니다. 설치된 각 응용 프로그램에 대해 AIR은 해당 응용 프로그램 관련 데이터를 저장하기에 좋은 장소인 고유한 응용 프로그램 저장소 디렉토리를 정의합니다. 예를 들어 다음 경로는 응용 프로그램 저장소 디렉토리의 settings 하위 디렉토리에 있는 prefs.xml 파일을 가리킵니다.

app-storage:/settings/prefs.xml

두 파일 간의 상대 경로 찾기

getRelativePath() 메서드를 사용하여 두 파일 간의 상대 경로를 찾을 수 있습니다.

var file1:File = File.documentsDirectory.resolvePath("AIR Test"); 
var file2:File = File.documentsDirectory 
file2 = file2.resolvePath("AIR Test/bob/test.txt"); 
 
trace(file1.getRelativePath(file2)); // bob/test.txt 

getRelativePath() 메서드의 두 번째 매개 변수인 useDotDot 매개 변수는 상위 디렉토리를 나타내는 .. 구문을 결과로 반환할 수 있습니다.

var file1:File = File.documentsDirectory; 
file1 = file1.resolvePath("AIR Test"); 
var file2:File = File.documentsDirectory; 
file2 = file2.resolvePath("AIR Test/bob/test.txt"); 
var file3:File = File.documentsDirectory; 
file3 = file3.resolvePath("AIR Test/susan/test.txt"); 
 
trace(file2.getRelativePath(file1, true)); // ../.. 
trace(file3.getRelativePath(file2, true)); // ../../bob/test.txt 

정규 버전의 파일 이름 가져오기

파일 및 경로 이름은 Windows 및 Mac OS에서 대/소문자를 구분하지 않습니다. 다음에서 두 File 객체는 같은 파일을 가리킵니다.

File.documentsDirectory.resolvePath("test.txt"); 
File.documentsDirectory.resolvePath("TeSt.TxT");

그러나 문서 및 디렉토리 이름에는 대/소문자가 포함됩니다. 예를 들어 다음 예제에서는 문서 디렉토리에 AIR Test라는 폴더가 있다고 가정합니다.

var file:File = File.documentsDirectory.resolvePath("AIR test"); 
trace(file.nativePath); // ... AIR test 
file.canonicalize(); 
trace(file.nativePath); // ... AIR Test 

canonicalize() 메서드는 파일 또는 디렉토리 이름에 올바른 대/소문자를 사용하도록 nativePath 객체를 변환합니다. Linux와 같이 대/소문자가 구분되는 파일 시스템에서 이름의 대/소문자만 다른 여러 파일이 있는 경우 canonicalize() 메서드는 파일 시스템에 의해 결정되는 순서로 검색된 첫 번째 파일과 일치하도록 경로를 조정합니다.

또한 다음 예제와 같이 canonicalize() 메서드를 사용하여 Windows에서 짧은 파일 이름("8.3" 이름)을 긴 파일 이름으로 변환할 수 있습니다.

var path:File = new File(); 
path.nativePath = "C:\\AIR~1"; 
path.canonicalize(); 
trace(path.nativePath); // C:\AIR Test

패키지 및 심볼 링크 작업

여러 운영 체제에서 패키지 파일과 심볼 링크 파일을 지원합니다.

패키지 - Mac OS에서는 디렉토리가 패키지로 지정될 수 있으며 Mac OS Finder에서 디렉토리가 아니라 하나의 파일로 표시됩니다.

심볼 링크 - Mac OS, Linux 및 Windows Vista는 심볼 링크를 지원합니다. 심볼 링크는 파일이 디스크에 있는 다른 파일이나 디렉토리를 가리키는 것을 허용합니다. 심볼 링크는 별칭과 비슷하긴 하지만 같지는 않습니다. 별칭은 항상 디렉토리가 아닌 파일로 보고되며, 별칭을 읽고 써도 해당 항목이 가리키는 원래 파일 또는 디렉토리는 전혀 영향을 받지 않습니다. 반면에 심볼 링크는 해당 항목이 가리키는 파일 또는 디렉토리와 똑같이 동작합니다. 파일 또는 디렉토리로 보고될 수 있으며, 심볼 링크를 읽거나 쓰면 심볼 링크 자체가 아니라 해당 항목이 가리키는 파일 또는 디렉토리에 영향을 줍니다. 또한 Windows에서는 교차점(NTFs 파일 시스템에서 사용됨)을 참조하는 File 객체에 대한 isSymbolicLink 속성이 true로 설정됩니다.

File 클래스에는 File 객체가 패키지 또는 심볼 링크를 참조하는지 확인하기 위한 isPackageisSymbolicLink 속성이 포함되어 있습니다.

다음 코드에서는 사용자 바탕 화면 디렉토리를 반복하여 패키지가 아닌 하위 디렉토리를 나열합니다.

var desktopNodes:Array = File.desktopDirectory.getDirectoryListing(); 
for (var i:uint = 0; i < desktopNodes.length; i++)  
{ 
    if (desktopNodes[i].isDirectory && !!desktopNodes[i].isPackage) 
    { 
        trace(desktopNodes[i].name); 
    } 
} 

다음 코드에서는 사용자 바탕 화면 디렉토리를 반복하여 심볼 링크가 아닌 파일 및 디렉토리를 나열합니다.

var desktopNodes:Array = File.desktopDirectory.getDirectoryListing(); 
for (var i:uint = 0; i < desktopNodes.length; i++)  
{ 
    if (!desktopNodes[i].isSymbolicLink) 
    { 
        trace(desktopNodes[i].name); 
    } 
} 

canonicalize() 메서드는 링크가 참조하는 파일 또는 디렉토리를 가리키도록 심볼 링크의 경로를 변경합니다. 다음 코드에서는 사용자 바탕 화면 디렉토리를 반복하여 심볼 링크인 파일이 참조하는 경로를 보고합니다.

var desktopNodes:Array = File.desktopDirectory.getDirectoryListing(); 
for (var i:uint = 0; i < desktopNodes.length; i++)  
{ 
    if (desktopNodes[i].isSymbolicLink) 
    { 
        var linkNode:File = desktopNodes[i] as File; 
        linkNode.canonicalize(); 
        trace(linkNode.nativePath); 
    } 
} 

볼륨에서 사용 가능한 공간 확인

File 객체의 spaceAvailable 속성은 File 위치에서 사용 가능한 공간(바이트)입니다. 예를 들어 다음 코드에서는 응용 프로그램 저장소 디렉토리에서 사용 가능한 공간을 확인합니다.

trace(File.applicationStorageDirectory.spaceAvailable); 

File 객체가 디렉토리를 참조하는 경우 spaceAvailable 속성은 해당 디렉토리에서 파일이 사용할 수 있는 공간을 나타냅니다. File 객체가 파일을 참조하는 경우 spaceAvailable 속성은 해당 파일이 커질 수 있는 공간을 나타냅니다. 해당 파일 위치가 존재하지 않으면 spaceAvailable 속성은 0으로 설정됩니다. File 객체가 심볼 링크를 참조하는 경우 spaceAvailable 속성은 심볼 링크가 가리키는 위치에서 사용 가능한 공간을 나타냅니다.

일반적으로 디렉토리나 파일에 사용할 수 있는 공간은 해당 디렉토리나 파일이 들어 있는 볼륨에서 사용 가능한 공간과 같습니다. 그러나 여유 공간에 계정 할당량 또는 디렉토리별 제한을 고려할 수 있습니다.

일반적으로 볼륨에 파일이나 디렉토리를 추가할 때는 파일의 실제 크기나 디렉토리 내용의 실제 크기보다 큰 공간이 필요합니다. 예를 들어 운영 체제에서 인덱스 정보를 저장할 추가 공간이 필요할 수 있습니다. 또는 필요한 디스크 섹터로 인해 추가 공간이 사용될 수 있습니다. 사용 가능한 공간은 동적으로 변경되기도 합니다. 따라서 보고된 파일 저장 공간이 모두 할당되지 않을 수도 있습니다. 파일 시스템에 쓰는 방법에 자세한 내용은 파일 읽기 및 쓰기를 참조하십시오.

StorageVolumeInfo.getStorageVolumes() 메서드는 마운트된 저장소 볼륨에 대해 보다 자세한 정보를 제공합니다(저장소 볼륨을 사용한 작업 참조).

기본 시스템 응용 프로그램으로 파일 열기

AIR 2에서는 운영 체제에서 해당 파일을 열도록 등록된 응용 프로그램을 사용하여 파일을 열 수 있습니다. 예를 들어 AIR 응용 프로그램에서는 DOC 파일을 열도록 등록된 응용 프로그램을 사용하여 DOC 파일을 열 수 있습니다. 파일을 열려면 File 객체의 openWithDefaultApplication() 메서드를 사용합니다. 예를 들어 다음 코드에서는 사용자의 데스크톱에서 test.doc라는 파일을 열며, DOC 파일에 대한 기본 응용 프로그램으로 이 파일을 엽니다.

var file:File = File.deskopDirectory; 
file = file.resolvePath("test.doc"); 
file.openWithDefaultApplication();
참고: Linux에서는 파일 이름 확장자가 아닌 파일의 MIME 유형에 따라 파일의 기본 응용 프로그램이 결정됩니다.

다음 코드에서는 사용자가 mp3 파일로 이동하여 mp3 파일 재생을 위한 기본 응용 프로그램으로 해당 파일을 열 수 있습니다.

var file:File = File.documentsDirectory; 
var mp3Filter:FileFilter = new FileFilter("MP3 Files", "*.mp3"); 
file.browseForOpen("Open", [mp3Filter]); 
file.addEventListener(Event.SELECT, fileSelected); 
 
function fileSelected(e:Event):void 
{ 
    file.openWithDefaultApplication(); 
}

응용 프로그램 디렉토리에 있는 파일에는 openWithDefaultApplication() 메서드를 사용할 수 없습니다.

AIR에서는 사용자가 openWithDefaultApplication() 메서드를 사용하여 특정 파일을 열 수 없습니다. Windows의 경우, AIR에서 사용자가 EXE 또는 BAT와 같은 특정 파일 유형을 열 수 없습니다. Mac OS 및 Linux의 경우 AIR가 특정 응용 프로그램에서 실행되는 파일을 열 수 없습니다. 이러한 응용 프로그램에는 Mac OS의 경우 Terminal 및 AppletLauncher, Linux의 경우 csh, bash 또는 ruby가 포함됩니다. openWithDefaultApplication() 메서드를 사용하여 이러한 파일 중 하나를 열려고 하면 예외가 발생합니다. 열 수 없는 파일 유형의 전체 목록은 File.openWithDefaultApplication() 메서드의 언어 참조 항목을 참조하십시오.

참고: 그러나 기본 설치 프로그램(확장 데스크톱 응용 프로그램)을 사용하여 설치된 AIR 응용 프로그램의 경우에는 이러한 제한이 없습니다. 자세한 내용은 기본 설치 프로그램에 AIR 응용 프로그램 패키지화를 참조하십시오.