檔案對象是啥?
檔案對象(File對象)是在檔案系統中指向檔案或目錄的指針。由于安全原因,隻在AIR中可用。
檔案對象能做啥?
擷取特定目錄,包括使用者目錄、使用者文檔目錄、該應用程式啟動的目錄和程式目錄
拷貝檔案和目錄
移動檔案和目錄
删除檔案和目錄(或移至資源回收筒)
列出某目錄中的檔案和目錄
建立臨時檔案和檔案夾
建立目錄
讀取檔案資訊
擷取檔案系統資訊
在AIR中,我們用FileStream讀寫檔案的前提就是用File對象來指向檔案。
那麼檔案對象具體怎麼玩呢?
功能1、指向目錄和檔案
File對象有兩個屬性都能定義檔案路徑,它們是nativePath和url。nativePath是在特定平台使用的檔案路徑(主要就是Windows和MacOs上的路徑表示不同),url則是統一的”file:///c:/Sample%20directory/test.txt”這樣的表示方法。
我們來看幾個指向目錄的執行個體,其中1-7示範了如何擷取特殊目錄:
var file:File = File.userDirectory; //指向使用者檔案夾
var file:File = File.documentsDirectory; //指向使用者文檔檔案夾
var file:File = File.desktopDirectory; //指向桌面
var file:File = File.applicationStorageDirectory; //指向應用程式存儲目錄
(參見AIR的URL方案)
var dir:File = File.applicationDirectory; //應用程式安裝目錄
var dir:File = File.getRootDirectories(); //檔案系統根目錄
還有一招,指向請求啟動該應用程式的目錄,先空着,以後補上。參考資料見《Capturing command
line arguments》
var file:File = new File();
file.nativePath = "C:\\Mousebomb\\";
//(windows平台)指向一個具體的目錄,這裡使用了nativePath屬性,”C:\\Mousebomb\\”隻适用windows中。
var file:File = File.userDirectory;
file = file.resolvePath(”Mousebomb”);
//跳轉到使用者目錄下的Mousebomb目錄
var urlStr:String = "file:///C:/Mousebomb/";
var file:File = new File()
file.url = urlStr;
//指向c盤下的Mousebomb目錄,這裡使用了url屬性
var file:File = new File();
file.addEventListener(Event.SELECT, dirSelected);
file.browseForDirectory("Select a directory");
function dirSelected(e:Event):void {
trace(file.nativePath);
}
下面看看指向檔案的執行個體:
指向明确的檔案位址:
var file:File = File.applicationStorageDirectory;
file = file.resolvePath("Flashj.txt");
使用url屬性的例子:
var urlStr:String = "file:///C:/Mousebomb/Flashj.txt";
var file:File = new File()
file.url = urlStr;
當然你也可以直接這樣寫
var urlStr:String = "file:///C: /Mousebomb/Flashj.txt";
var file:File = new File(urlStr);
//url中的空格會被%20替換
使用nativePath屬性:
var file:File = new File();
file.nativePath = "C:/ Mousebomb/Flashj.txt";
或者
var file:File = new File("C:/ Mousebomb/Flashj.txt");
//(Windows下)
通過對話框讓使用者選擇檔案
實作這個功能需要認識三個方法:
browseForOpen()
browseForSave()
browseForOpenMultiple()
三個方法都是異步的,browseForOpen() 和 browseForSave()方法在使用者選擇檔案時會觸發select事件,在選擇了某檔案時,File指向選擇的檔案。 而browseForOpenMultiple()方法會觸發selectMultiple事件,該事件屬于FileListEvent型,它的屬性中具有指向所選檔案的File對象數組。
例子:
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);
}
功能2、拷貝檔案和目錄
拷貝檔案使用到的方法有copyTo()和copyToAsync(),詳見AIR檔案基礎,前者為同步方法,後者為異步方法。
要拷貝檔案,需要建立2個File對象,一個指向原檔案,一個指向目标檔案。像下面兩例:
1.同步拷貝例:
var original:File = File.documentsDirectory.resolvePath("Mousebomb/FlashJ.txt");
var newFile:File = File.resolvePath("Mousebomb/FlashJcn.txt");
original.copyTo(newFile, true);
第二個參數true表示覆寫存在的檔案,預設值是false,若設定為false,而拷貝的目标檔案已經存在,則AIR會發出IOErrorEvent事件。
2.異步拷貝例:
var original = File.documentsDirectory;
original = original.resolvePath("Mousebomb/FlashJ.txt");
var destination:File = File.documentsDirectory;
destination = destination.resolvePath("FlashJ/FlashJcn.txt");
original.addEventListener(Event.COMPLETE, fileCopyCompleteHandler);
original.addEventListener(IOErrorEvent.IO_ERROR, fileCopyIOErrorEventHandler);
original.CopyToAsync(destination);
function fileCopyCompleteHandler(event:Event):void {
trace(event.target); // [object File]
}
function fileCopyIOErrorEventHandler(event:IOErrorEvent):void {
trace("I/O Error.");
}
功能3、移動檔案和目錄
移動檔案使用的方法有moveTo()和MoveToAsync(),不僅長相類似,連使用方法都與拷貝檔案一樣,可以直接參考上文。
功能4、删除檔案和目錄(或移至資源回收筒)
deleteFile()和deleteFileAsync()負責删除功能,而moveToTrash()和moveToTrashAsync()功能是移至資源回收筒。先建立一個File對象指向某個檔案或目錄,然後執行四個方法之一,處理異步方法要加事件監聽。
var file:File = File.documentsDirectory.resolvePath("DeleteMe.txt");
file.moveToTrash();
功能5、列出某目錄中的檔案和目錄
可以使用getDirectoryListing()方法和getDirectoryListingAsync()方法擷取某個目錄下檔案與子目錄的File指針數組。
例如:
var directory:File = File.documentsDirectory;
var contents:Array = directory.getDirectoryListing();
for (var i:uint = 0; i < contents.length; i++)
{
trace(contents[i].name, contents[i].size);
}
本例輸出了使用者文檔目錄中的檔案名和大小。
若使用異步方法,例如:
var directory:File = File.documentsDirectory;
directory.getDirectoryListingAsync();
directory.addEventListener(FileListEvent.DIRECTORY_LISTING, dirListHandler);
function dirListHandler(event:FileListEvent):void
{
var contents:Array = event.files;
for (var i:uint = 0; i < contents.length; i++)
{
trace(contents[i].name, contents[i].size);
}
}
其中directoryListing事件對象中有個files屬性,為目錄下内容的File指針數組。
功能6、建立臨時檔案和檔案夾
使用createTempFile()和createTempDirectory()方法可以建立臨時檔案和檔案夾。
var temp:File = File.createTempFile(); //在系統臨時檔案夾下建立臨時檔案
createTempFile()方法會自動建立一個唯一的臨時檔案。
createTempDirectory ()方法會自動建立一個唯一的臨時檔案夾。
你可以用臨時檔案來臨時存儲應用程式回話中的資訊。
由于臨時檔案不會自動删除,是以你可能得讓應用程式在關閉前删除它。
功能7、建立目錄
使用createDirectory()方法可以建立目錄,例如:
var dir:File = File.userDirectory.resolvePath("Mousebomb");
dir.createDirectory();
這個例子在使用者檔案夾下建立了Mousebomb目錄,如果Mousebomb目錄存在,則不會作出操作。
功能8、讀取檔案資訊
File類中包含以下屬性,提供File對象所指向檔案或目錄的資訊。
屬性
描述
creationDate
建立日期
exists
是否存在
extension
擴充名,若無則為null
icon
該檔案的圖示對象
isDirectory
是否目錄
modificationDate
修改日期
name
檔案名(包括擴充名)
nativePath
特定平台使用的檔案路徑
parent
父級目錄,若該File對象就是頂級則此屬性為null
size
位元組大小
url
統一資源定位符
詳細參見AIR ActionScript. 3.0 Language Reference for Adobe AIR.
功能9、擷取檔案系統資訊
File類包含一下靜态屬性,提供有用的檔案系統資訊(主要是跨平台使用):
屬性
描述
File.lineEnding
系統的行結束符
File.separator
系統的分隔符(Windows下為\ Mac Os為/)
File.systemCharset
系統的預設檔案編碼,屬于系統所使用的字元集
順便插進Capabilities類包含的靜态屬性:
屬性
描述
Capabilities.hasIME
目前運作的系統是否安裝了輸入法編輯器
Capabilities.language
目前運作的系統的語言編碼
Capabilities.os
目前運作的作業系統
參考文獻:http://livedocs.adobe.com/air/1/devappsflash/help.html?content=dg_part_6_1.html(檔案與資料)