AIR文件操作(二):使用文件对象操作文件和目录
转载于:http://www.flashj.cn/wp/air-file-operation2.html
文件对象是啥?
文件对象(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(文件与数据)
(本文若有不当之处,敬请指出。)
AIR文件操作(二):使用文件对象操作文件和目录的更多相关文章
- Python脚本控制的WebDriver 常用操作 <二十六> 上传文件
测试用例场景 上传文件的方法是找到上传文件的对象,通常是的对象.然后直接往这个对象send_keys,传入需要上传文件的正确路径.绝对路径和相对路径都可以,但是上传的文件必须存在,否则会报错. Pyt ...
- DOM、Window对象操作
一.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 一.基本语法: 数据类型(字符串,小数,整数,布尔,时间) var, v ...
- AIR文件操作:使用文件对象操作文件和目录 .
来源:http://blog.csdn.net/zdingxin/article/details/6635376 在AIR中可以方便的对本地文件操作,不过上次做了个项目,发现还是有不少不方便的地方,比 ...
- AIR使用文件对象操作文件和目录
文件对象是啥?文件对象(File对象)是在文件系统中指向文件或目录的指针.由于安全原因,只在AIR中可用. 文件对象能做啥? 获取特定目录,包括用户目录.用户文档目录.该应用程序启动的目录和程序目录 ...
- Unity3D学习笔记(二十五):文件操作
文件是什么? 存储在硬盘上的最后的节点. 文件夹是什么? 文件的上级单位称为文件夹. 文件夹的基本结构? 文件夹是层级化结构的,对于同级的文件夹不可以重名,父文件夹和子文件夹可以同名> IO:I ...
- 用 python 来操作 docx, xlsx 格式文件(二)(使用 docx 库操作 docx 格式文件
docx 库 文章结构: 一.docx 基本用,创建 docx 文件并添加数据 二.深入理解文本格式(format),并设置所格式属性(attribute) 三.深入理解样式(styles),以及如何 ...
- DAY8 文件操作(二)
一.写 1.1写文件 # w:没有文件新建文件,有文件就清空文件 w = open('1.txt', 'w', encoding='utf-8') w.write('000\n') # 在写入大量数据 ...
- Python小白学习之路(二十)—【打开文件的模式二】【文件的其他操作】
打开文件的模式(二) 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码.图片文件的jgp格 ...
- Objective-c:NSFileHandle类,创建流对象,对文件进行写入、读取的操作
NSFileHandle类:它需要配合NSFileManager文件管理类,对文件内容进行操作,写入数据.读取数据. 使用步骤: 1.打开文件获取NSFileHandle类的对象 2. ...
随机推荐
- [翻译]Restful Web服务模型
最近我一直在阅读“Rest实践”的草稿:一本几位同事一直在努力编写的书. 他们的目的是解释如何使用Restful Web服务来处理企业面临的许多集成问题. 这本书的核心在于这样一种观点,Web以一个有 ...
- docker entrypoint入口文件详解
docker entrypoint入口文件详解 pasting Dockerfile创建自定义Docker镜像以及CMD与ENTRYPOINT指令的比较 [k8s]args指令案例-彻底理解docke ...
- mongodb json序列化时间格式
利用bson解决 type error 报错问题. # 序列化 from bson import json_util import json aa = json.dumps(anObject, def ...
- 聊天,发朋友圈可以不打字,但是表情怎么能少呢?那么如何用win10自带的微软拼音输入法打出表情呢?
Step1:将光标定位到你要输入的地方 Step2:将输入法切换为中文,win10是[Win+空格] Step3:打出想要的表情类型,例如开心,(切记输完后不要选择文字,就保持拼音状态),保持下图的样 ...
- 如何把RabbitMQ卸载干净
原文转载至:https://blog.csdn.net/w893932747/article/details/81018191 To uninstall RabbitMQ and Erlang fro ...
- 读《SQL优化核心思想》:你不知道的优化技巧
SQL性能问题已经逐步发展成为数据库性能的首要问题,80%的数据库性能问题都是因SQL而导致. 1.1 基数(CARDINALITY) 某个列唯一键(Distinct_Keys)的数量叫作基数.比如性 ...
- C#截取字符串按字节截取SubString
public static string CutByteString(string str,int len) { string result=string.Empty;// 最终返 ...
- Opening socket connection to server :2181. Will not attempt to authenticate using SASL (unknown error) hbase
问题: 在HBase机群搭建完成后,通过jdbc连接hbase,在连接zookeeper阶段出现Opening socket connection to server :2181. Will not ...
- js中基本数据类型和引用数据类型的区别
1.基本数据类型和引用数据类型 ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型. 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象. 当我们把变量赋值给一个变 ...
- BZOJ3812主旋律
/* 这道题其实没有看懂 所以整理一下吧 首先思想转化成所有方案减去不强联通的方案 不强联通的方案相当于很多强联通分量缩点后的dag 转化成子问题, 问很多点的dag方案数 然后枚举作为出度为0的点集 ...