使用Flash air操作本地文件
文件操作類
Flash?AIR提供了讓您能用來訪問、創建、管理文件與目錄的類。這些類被放置在flash.filesystem包中,也就是下面那三個類:
| 類 | 描述 |
| File | File對象代表一個文件或目錄的路徑。您可以用file對象建立一個指向文件或目錄的指針,以作用于文件或目錄。 |
| FileMode | FileMode類定義在FileStream類的open()和openAsync()方法中使用的字符串常量參數。 |
| FileStream | FileStream對象打開文件以便讀寫數據。當創建一個File對象指向一個新的或已存在的文件后,您將該指針傳遞給FileStream對象,就可以用FileStream來打開并操作文件數據。 |
File類中的某些方法分別有同步和異步兩種版本:
·?File.copyTo() 和 File.copyToAsync()
·?File.deleteDirectory() 和File.deleteDirectoryAsync()
·?File.deleteFile() 和File.deleteFileAsync()
·?File.getDirectoryListing() 和File.getDirectoryListingAsync()
·?File.moveTo() 和File.moveToAsync()
·?File.moveToTrash() 和File.moveToTrashAsync()
同樣,FileStream是以同步或異步方式來操作數據,取決于FileStream對象如何打開文件:是調用open()方法還是調用openAsync()方法。
異步版本的處理過程在后臺運行,當執行完成或產生錯誤時觸發相應事件。其他代碼可以在這些異步操作后臺運行的同時執行。使用異步版本操作,你必須設置事件監聽,使用File或FileStream對象的addEventListener()方法調用相應函數。
同步版本使您不需要依賴設置事件監聽,直接寫簡單的代碼。然而,其他代碼無法在同步方法執行時執行,重要的進程(比如顯示對象渲染和動畫播放)可能被暫停。
使用文件對象操作文件和目錄
什么是文件對象?
文件對象(File對象)是在文件系統中指向文件或目錄的指針。由于安全原因,只在AIR中可用。在AIR中,我們用FileStream讀寫文件的前提就是用File對象來指向文件。
兩種路徑表示方法
File對象有兩個屬性都能定義文件路徑,它們是nativePath和url。nativePath是在特定平臺使用的文件路徑(主要就是Windows和MacOs上的路徑表示不同),url則是統一的”file:///c:/Sample%20directory/test.txt”這樣的表示方法。
獲取特殊目錄的方法:
var file:File = File.userDirectory; //指向用戶文件夾 var file:File = File.documentsDirectory; //指向用戶文檔文件夾 var file:File = File.desktopDirectory; //指向桌面 var file:File = File.applicationStorageDirectory; //指向應用程序存儲目錄 var dir:File = File.applicationDirectory; //應用程序安裝目錄 var dir:File = File.getRootDirectories(); //文件系統根目錄獲取指定目錄:
1.本地路徑
//(windows平臺)指向一個具體的目錄,這里使用了nativePath屬性,”C:Mousebomb”只適用windows中。 var file:File = newFile(); file.nativePath = "C:Mousebomb"; //跳轉到用戶目錄下的Mousebomb目錄 var file:File = File.userDirectory; file = file.resolvePath(“Mousebomb”);2.url路徑
//指向c盤下的Mousebomb目錄,這里使用了url屬性 var urlStr:String = "file:///C:/Mousebomb/"; var file:File = newFile(); file.url = urlStr;
讓用戶選擇目錄
var file:File = newFile(); file.addEventListener(Event.SELECT, dirSelected); file.browseForDirectory("Select a directory"); function dirSelected(e:Event):void{ trace(file.nativePath); }獲取文件
1.?指向明確的文件地址:
var file:File = File.applicationStorageDirectory;
file = file.resolvePath("Flashj.txt");
2.?使用url屬性的例子:
var urlStr:String = "file:///C:/Mousebomb/Flashj.txt";
var file:File = newFile()
file.url = urlStr;
3.?當然你也可以直接這樣寫
var urlStr:String = "file:///C: /Mousebomb/Flashj.txt";
var file:File = newFile(urlStr);//url中的空格會被%20替換
4.?使用nativePath屬性:
var file:File = newFile();
file.nativePath = "C:/ Mousebomb/Flashj.txt";
或者
var file:File = newFile("C:/ Mousebomb/Flashj.txt");
//(Windows下)
?5.用windows默認程序打開指定文件
file.openWithDefaultApplication();
通過對話框讓用戶選擇文件
實現這個功能需要認識三個方法:browseForOpen()
browseForSave()
browseForOpenMultiple()
三個方法都是異步的,browseForOpen() 和 browseForSave()方法在用戶選擇文件時會觸發select事件,在選擇了某文件時,File指向選擇的文件。 而browseForOpenMultiple()方法會觸發selectMultiple事件,該事件屬于FileListEvent型,它的屬性中具有指向所選文件的File對象數組。
例子:
var fileToOpen:File = File.documentsDirectory; selectTextFile(fileToOpen); functionselectTextFile(root:File):void { var txtFilter:FileFilter = newFileFilter("Text", "*.as;*.css;*.html;*.txt;*.xml"); root.browseForOpen("Open", [txtFilter]); root.addEventListener(Event.SELECT, fileSelected); } function fileSelected(event:Event):void { trace(fileToOpen.nativePath); }
拷貝文件和目錄
要拷貝文件,需要創建2個File對象,一個指向原文件,一個指向目標文件。
同步拷貝,必須等拷貝完成之后才能執行其他代碼:
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事件。
異步拷貝,將拷貝放在后臺執行,可以同時執行其他代碼:
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); functionfileCopyCompleteHandler(event:Event):void{ trace(event.target); // [object File] } functionfileCopyIOErrorEventHandler(event:IOErrorEvent):void{ trace("I/O Error."); }
移動文件和目錄
使用函數moveTo()和MoveToAsync(),方法和拷貝一樣。
刪除文件和目錄(或者移動到回收站)
deleteFile()和deleteFileAsync()負責刪除功能,而moveToTrash()和moveToTrashAsync()功能是移至回收站。先創建一個File對象指向某個文件或目錄,然后執行四個方法之一,處理異步方法要加事件監聽。
var file:File = File.documentsDirectory.resolvePath("DeleteMe.txt"); file.moveToTrash();
列出目錄中的文件或目錄
可以使用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); functiondirListHandler(event:FileListEvent):void { varcontents:Array = event.files;//directoryListing事件對象中有個files屬性,為目錄下內容的File指針數組。 for(vari:uint = 0; i < contents.length; i++) { trace(contents[i].name, contents[i].size); } }
創建臨時文件和文件夾
使用createTempFile()和createTempDirectory()方法可以創建臨時文件和文件夾。
var temp:File = File.createTempFile(); //在系統臨時文件夾下創建臨時文件
createTempFile()方法會自動創建一個唯一的臨時文件。
createTempDirectory ()方法會自動創建一個唯一的臨時文件夾。
你可以用臨時文件來臨時存儲應用程序回話中的信息。
由于臨時文件不會自動刪除,所以你可能得讓應用程序在關閉前刪除它。
創建目錄
使用createDirectory()方法可以創建目錄,例如:
1.?vardir:File = File.userDirectory.resolvePath("Mousebomb");
2.?dir.createDirectory();
這個例子在用戶文件夾下創建了Mousebomb目錄,如果Mousebomb目錄存在,則不會作出操作。
讀取文件信息
File類中包含以下屬性,提供File對象所指向文件或目錄的信息。
| 屬性 | 描述 |
| creationDate | 創建日期 |
| exists | 是否存在 |
| extension | 擴展名,若無則為null |
| icon | 該文件的圖標對象 |
| isDirectory | 是否目錄 |
| modificationDate | 修改日期 |
| name | 文件名(包括擴展名) |
| nativePath | 特定平臺使用的文件路徑 |
| parent | 父級目錄,若該File對象就是頂級則此屬性為null |
| size | 字節大小 |
| url | 統一資源定位符 |
獲取文件系統信息
File類包含一下靜態屬性,提供有用的文件系統信息(主要是跨平臺使用):
| 屬性 | 描述 |
| File.lineEnding | 系統的行結束符 |
| File.separator | 系統的分隔符(Windows下為Mac Os為/) |
| File.systemCharset | 系統的默認文件編碼,屬于系統所使用的字符集? |
順便插進Capabilities類包含的靜態屬性:
| 屬性 | 描述 |
| Capabilities.hasIME | 當前運行的系統是否安裝了輸入法編輯器? |
| Capabilities.language | 當前運行的系統的語言編碼 |
| Capabilities.os | 當前運行的操作系統 |
總結
以上是生活随笔為你收集整理的使用Flash air操作本地文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(3172):react-hel
- 下一篇: 图解TCPIP 学习笔记(一)