ファイルやディレクトリへのアクセス
ブラウザ上で実行されるウェブアプリケーションがローカルファイルへのアクセスを制限されているのに対し、
例として、
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="test()">
<mx:Script>
<![CDATA[
import flash.filesystem.File;
private function test():void {
var dir:File = File.desktopDirectory;
trace(dir.nativePath);
}
]]>
</mx:Script>
</mx:WindowedApplication>
Macintoshの場合:/Users/ユーザ名/Desktop Windowsの場合:C:\Documents and Settings\ユーザ名\デスクトップ
このように1つのコードで複数のプラットフォームに対応できるわけです。
ファイルやディレクトリの参照にはFileオブジェクトを使います。Fileクラスには、
applicationResourceDirectory:File | アプリケーションのリソースがインストールされているディレクトリ |
applicationStorageDirectory:File | アプリケーション毎に割り当てられる保存用ディレクトリ |
desktopDirectory:File | ユーザのデスクトップディレクトリ |
documentsDirectory:File | ユーザのドキュメントディレクトリ |
userDirectory:File | ユーザのホームディレクトリ |
nativePathプロパティは、
var file:File = new File();
file.nativePath = "C:\Documents and Settings\ユーザ名\My Documents\sample.txt";
※WindowsではnativePathプロパティのパスデリミタとして"\
"の代わりに"/"を使うこともできます。Macintoshでは"/"のみです。
しかし、
var dir:File = File.documentsDirectory;
var file:File = dir.resolve("sample.txt");
親ディレクトリは、
var dir1:File = File.userDirectory.resolve("..");
var dir2:File = File.userDirectory.parent;
nativePathプロパティ対して、
var dir:File = File.userDirectory;
trace(dir.url);
Macintoshの場合:file:///Users/ユーザ名 Windowsの場合:file:///C:/Documents%20and%20Settings/ユーザ名
URLスキームは、
app-resource | アプリケーションのリソースがインストールされているディレクトリを表す |
app-storage | アプリケーション毎に割り当てられる保存用ディレクトリを表す |
applicationResourceDirectoryプロパティやapplicationStorageDirectoryプロパティの代わりにこれらを使ってアプリケーション固有のディレクトリにアクセスできます。
var file:File = new File();
file.url = "app-storage:/config/prefs.xml";
ファイルやディレクトリの情報を調べる
Fileオブジェクトが参照しているファイルやディレクトリに関する情報は、
name:String | 名前 |
size:Number | サイズ |
extension:String | 拡張子 |
creationDate:Date | 作成日時 |
modificationDate:Date | 最終更新日時 |
isHidden:Boolean | 不可視かどうか |
isDirectory:Boolean | ディレクトリかどうか |
icon:Icon | 関連付けされているアイコン |
exists:Boolean | 存在するかどうか |
iconプロパティは少し特殊なので説明しておきます。これはファイルアイコンやフォルダアイコンをBitmapDataオブジェクトで取得できるプロパティです。値となるIconオブジェクトは、
var file:File = File.desktopDirectory.resolve("sample.air");
var images:Array = file.icon.bitmaps;
var xpos:uint = 0;
for (var i:uint = 0; i < images.length; i++) {
var bmp:Bitmap = new Bitmap(images[i]);
bmp.x = xpos;
xpos += bmp.width;
window.stage.addChild(bmp);
}

同期メソッドと非同期メソッド
Fileオブジェクトにファイルやディレクトリを指定したら、
同期メソッドの場合、
非同期メソッドの場合、
ファイルやディレクトリのコピー、移動
ファイルやディレクトリのコピーや移動を行うには、
同期メソッド | 非同期メソッド | |
---|---|---|
ファイルやディレクトリをコピー | copyTo() | copyToAsync() |
ファイルやディレクトリを移動 | moveTo() | moveToAsync() |
コピーと移動はメソッド名が違うだけで、
var file1:File = File.documentsDirectory.resolve("sample.txt");
var file2:File = File.desktopDirectory.resolve("sample.txt");
try {
file1.copyTo(file2, true);
} catch (error:IOError) {
trace(error.message);
}
このように、
次に非同期メソッドを使った方法を見てみましょう。次のコードはcopyToAsync()メソッドを使ってファイルをコピーする例です。メソッドの使い方はcopyTo()と変わりませんが、
var file1:File = File.documentsDirectory.resolve("sample.txt");
var file2:File = File.desktopDirectory.resolve("sample.txt");
file1.addEventListener(Event.COMPLETE, onFileCopyComplete);
file1.addEventListener(IOErrorEvent.IO_ERROR, onFileCopyError);
file1.copyToAsync(file2, true);
private function onFileCopyComplete(event:Event):void {
trace("コピー完了");
}
private function onFileCopyError(event:IOErrorEvent):void {
trace("I/Oエラー");
}
ファイルやディレクトリの作成
ファイルやディレクトリの作成を行うには、
ディレクトリを作成 | createDirectory() |
一時ファイルを作成 | createTempFile() |
一時ディレクトリを作成 | createTempDirectory() |
作成したいディレクトリをFileオブジェクトに指定し、
var dir:File = File.desktopDirectory.resolve("Sounds");
dir.createDirectory();
createTempFile()とcreateTempDirectory()は、
var tempFile:File = File.createTempFile();
var tempDir:File = File.createTempDirectory();
なお、
ファイルやディレクトリの削除
ファイルやディレクトリの削除を行うには、
同期メソッド | 非同期メソッド | |
---|---|---|
ファイルを削除 | deleteFile() | deleteFileAsync() |
ディレクトリを削除 | deleteDirectory() | deleteDirectoryAsync() |
ファイルやディレクトリをゴミ箱へ移動 | moveToTrash() | moveToTrashAsync() |
メソッドの使い方はこれまで説明してきたものと同様で、
deleteDirectory()とdeleteDirectoryAsync()は引数を1つ取ります。指定のディレクトリにファイルやサブディレクトリが含まれていた場合に削除するかどうかを指定するフラグです。false
ディレクトリの内容を調べる
ディレクトリ内にどのようなファイルやフォルダがあるか調べるには、
同期メソッド | 非同期メソッド | |
---|---|---|
ディレクトリ内の一覧を取得 | listDirectory() | listDirectoryAsync() |
これらのメソッドは、
var dir:File = File.desktopDirectory;
var files:Array = dir.listDirectory();
for (var i:uint = 0; i < files.length; i++) {
trace(files[i].nativePath);
}