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 및 iOS에서 응용 프로그램 저장소 디렉토리는 해당 응용 프로그램이 제거되거나 사용자가 응용 프로그램 데이터를 지우는 경우 제거되지만 다른 플랫폼에서는 그렇지 않습니다.

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

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

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

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

참고: 플랫폼에서 데스크톱, 문서 또는 사용자 디렉토리에 대한 표준 위치를 정의하지 않는 경우 File.documentsDirectory , File.desktopDirectory File.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

캐시

/data/data/applicationID/cache

데스크톱

/mnt/sdcard

문서

/mnt/sdcard

임시

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

사용자

/mnt/sdcard

iOS

응용 프로그램

/var/mobile/Applications/uid/filename.app

응용 프로그램 저장소

/var/mobile/Applications/uid/Library/Application Support/applicationID/Local Store

캐시

/var/mobile/Applications/uid/Library/Caches

데스크톱

액세스할 수 없음

문서

/var/mobile/Applications/uid/Documents

임시

/private/var/mobile/Applications/uid/tmp/FlashTmpNNN

사용자

액세스할 수 없음

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 (AIR 3.2 이하)

path /Library/Application Support/ applicationid /Local Store (AIR 3.3 이상). 여기서 'path'는 /Users/ userName /Library/Containers/ bundle-id /Data (샌드박스 환경) 또는 /Users/userName (샌드박스 환경 외부에서 실행되는 경우)

캐시

/Users/userName/Library/Caches

데스크톱

/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\Local Settings\Temp

데스크톱

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 응용 프로그램에서 위 표에 나온 applicationID filename 의 값은 응용 프로그램 설명자로부터 가져 옵니다. 응용 프로그램 설명자에서 제작자 ID를 지정하면 해당 제작자 ID는 이와 같은 경로의 응용 프로그램 ID에 추가됩니다. userName 의 값은 설치를 실행한 사용자의 계정 이름입니다.

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의 경우 AIR 버전에 따라 다름:

    AIR 3.2 이하 : /Users/user name/Library/Preferences/ applicationID /Local Store/

    AIR 3.3 이상 : path /Library/Application Support/ applicationID /Local Store . 여기서 path /Users/ username /Library/Containers/ bundle-id /Data (샌드박스 환경) 또는 /Users/ username (샌드박스 환경 외부에서 실행되는 경우)

    예(AIR 3.2):

    /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
참고: 응용 프로그램에 제작자 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.cacheDirectory 속성을 사용하여 File 객체가 운영 체제의 임시 디렉토리 또는 캐시 디렉토리를 가리키도록 할 수 있습니다. 이 디렉토리에는 응용 프로그램 실행에 필요하지 않고 삭제하더라도 문제나 데이터 손실이 발생하지 않는 임시 파일이 들어 있습니다.

대부분의 운영 체제에서는 캐시 디렉토리가 임시 디렉토리입니다. iOS에서는 캐시 디렉토리가 응용 프로그램 라이브러리의 Caches 디렉토리입니다. 이 디렉토리의 파일은 온라인 저장소에 백업되지 않으며 장치의 가용 저장 공간이 부족할 경우 운영 체제에 의해 삭제될 수도 있습니다. 자세한 내용은 파일 백업 및 캐싱 제어 를 참조하십시오.

파일 시스템 루트 가리키기

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() 메서드는 비동기적입니다. File 객체는 사용자가 디렉토리를 선택하고 [열기] 버튼을 클릭하는 경우 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 예외가 발생합니다.

참고: Android에서는 browseForOpen() browseForOpenMultiple() 메서드로 이미지, 비디오 및 오디오 파일만 선택할 수 있습니다. 또한 browseForSave() 대화 상자에는 사용자가 임의의 파일 이름을 입력할 수 있지만 미디어 파일만 표시됩니다. 미디어가 아닌 파일을 열고 저장하려면 이러한 메서드 대신 사용자 정의 대화 상자를 사용해야 합니다.

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

파일 백업 및 캐싱 제어

일부 운영 체제(대표적인 예로 iOS 및 Mac OS X)에는 응용 프로그램 파일을 자동으로 원격 저장소에 백업하는 기능이 있습니다. 또한 iOS에서는 파일 백업 여부 및 용도에 따른 파일 저장 장소에 대해 제약이 있습니다.

다음은 Apple의 파일 백업 및 저장에 관한 지침 준수 방법을 요약한 것입니다. 자세한 내용은 다음 섹션을 참조하십시오.

  • 파일을 백업할 필요가 없고 장치 저장 공간이 부족할 경우 운영 체제가 파일을 삭제할 수 있도록 지정하려면(iOS에만 해당) 파일을 캐시 디렉토리( File.cacheDirectory )에 저장하십시오. 이는 iOS의 기본 저장 위치이며 다시 생성하거나 다시 다운로드할 수 있는 대부분의 파일에 대해 이 위치를 사용하는 것이 좋습니다.

  • 파일을 백업할 필요는 없지만 운영 체제가 삭제할 수 없도록 지정하려면 파일을 응용 프로그램 저장 디렉토리( File.applicationStorageDirectory ) 또는 문서 디렉토리( File.documentsDirectory )와 같은 응용 프로그램 라이브러리 디렉토리 중 하나에 저장하십시오. File 객체의 preventBackup 속성을 true 로 설정하십시오. 이는 다시 생성하거나 다시 다운로드할 수 있지만 오프라인에서 사용할 때 응용 프로그램이 올바르게 작동하도록 하는 데 필요한 내용에 대한 Apple의 요구 사항입니다.

파일 백업 지정

백업 공간을 절약하고 네트워크 대역폭 사용을 줄이기 위해 iOS 및 Mac 응용 프로그램에 관한 Apple 지침은 사용자 입력 데이터 또는 다시 생성할 수 없고 다시 다운로드할 수 없는 데이터가 포함된 파일만 백업용으로 지정할 수 있도록 규정하고 있습니다.

기본 설정에 따라 응용 프로그램 라이브러리 폴더의 모든 파일이 백업됩니다. Mac OS X의 경우 이는 응용 프로그램 저장 디렉토리입니다. iOS에서는 여기에 응용 프로그램 저장 디렉토리, 응용 프로그램 디렉토리, 데스크톱 디렉토리, 문서 디렉토리 및 사용자 디렉토리가 포함됩니다(이들 디렉토리가 iOS의 응용 프로그램 라이브러리 폴더에 매핑되기 때문). 따라서 기본 설정에 따라 이들 디렉토리의 모든 파일이 서버 저장소에 백업됩니다.

파일을 응용 프로그램이 다시 생성할 수 있는 위치 중 하나에 저장하는 경우 파일을 운영 체제가 백업하지 않도록 플래그를 지정해야 합니다. 파일을 백업하지 않도록 지정하려면 File 객체의 preventBackup 속성을 true 로 설정하십시오.

iOS에서는 응용 프로그램 라이브러리 폴더에 있는 파일의 경우 해당 파일의 preventBackup 속성이 true 로 설정된 경우에도 운영 체제가 삭제할 수 없는 영구 파일로 플래그를 설정합니다.

파일 캐싱 및 삭제 제어

iOS 응용 프로그램에 관한 Apple의 지침에 따르면 다시 생성할 수 있는 내용은 장치의 저장 공간이 부족할 경우 가급적 운영 체제가 삭제하도록 하는 것이 좋습니다.

iOS에서는 응용 프로그램 라이브러리 폴더(예: 응용 프로그램 저장 디렉토리 또는 문서 디렉토리)의 파일이 영구 파일로 플래그가 설정되어 운영 체제에 의해 삭제되지 않습니다.

응용 프로그램이 다시 생성할 수 있고, 응용 프로그램 캐시 디렉토리에 저장 공간이 부족할 경우 삭제해도 무방한 파일을 저장하십시오. File.cacheDirectory 정적 속성을 사용하여 캐시 디렉토리에 액세스합니다.

iOS에서 캐시 디렉토리는 응용 프로그램의 캐시 디렉토리(<Application Home>/Library/Caches)입니다. 다른 운영 체제에서는 이 디렉토리가 해당 디렉토리에 매핑됩니다. 예를 들어 Mac OS X에서는 응용 프로그램 라이브러리의 Caches 디렉토리에 매핑됩니다. Android에서는 캐시 디렉토리가 응용 프로그램의 캐시 디렉토리에 매핑됩니다. Windows의 경우 캐시 디렉토리가 운영 체제 임시 디렉토리에 매핑됩니다. Android 및 Windows 모두 File 클래스의 createTempDirectory() createTempFile() 메서드 호출 시 액세스하는 디렉토리가 동일합니다.

두 파일 간의 상대 경로 찾기

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 객체가 패키지 또는 심볼 링크를 참조하는지 확인하기 위한 isPackage isSymbolicLink 속성이 포함되어 있습니다.

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

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 응용 프로그램(확장된 데스크톱 응용 프로그램)에는 적용되지 않습니다.