7yue's Weblog

Thinking in RIA Solutions...2470,8514,1020的生活演绎

« AIR 1.5升级至1.5.1Flash Player最新版本号 »

AIR APIs详解-文件系统访问 Part2

从part1你了解了如何快速通过AIR API的File类创建一个全新的文件夹,part2将会对此做进一步说明。Part1中,我们用到了File类的desktopDirectory这个内置属性,听这个名字,就知道是直接将AIR应用的File对象路径指向用户桌面。我们在part1中就轻轻地提及了其他几个静态属性:

File.applicationStorageDirectory — 每个已安装的 AIR 应用程序独有的存储目录文件夹
File.applicationDirectory — 安装应用程序的只读目录(其中包括所有已安装的资源)
File.documentsDirectory — 用户的文档目录
File.userDirectory — 用户目录

我认为Part2有必要进一步做个解释了,因为有人可能会在这里有疑问。且看下面:

开发者疑问:为什么File类就要带这几个静态属性,如果我的AIR应用是要访问用户C盘或者D盘路径下的某个文件夹呢,是不是不允许?
我的回答是,AIR在File类提供这几个静态属性,是为了保证开发人员使用这些静态属性的值去访问用户文件系统时,能够高度保持应用跨平台的一致性。就像part1中的例子里的这部分代码:

var newDirectory:File =File.desktopDirectory.resolvePath("我的AIR文件夹");
newDirectory.createDirectory();

当Windows用户执行AIR应用时,desktopDirectory会自动帮你映射到Windows系统的桌面路径;而同样的应用,当被MACOSX用户执行时,desktopDirectory也同样会自动帮你映射到MACOSX的桌面上去,这就通过了desktopDirectory保证了跨平台应用访问路径的一致性。再深究一下,desktopDirectory属性在我的Windows下指的是:

C:\Documents and Settings\zma\Desktop\

而在我的MACOSX下则指向:

/Users/zma/Desktop/

如果按照开发者说的,随意指定一个系统路径来访问文件系统,未尝不可。假定part1的随意路径就是指向我windows系统的桌面,我就可以这样去定义:

var newDirectory:File =new File("C:\\Documents and Settings\\zma\\Desktop\\我的AIR文件夹");
//或者你使用正斜杠
//var newDirectory:File=new File("C:/Documents and Settings/zma/Desktop/我的AIR文件夹");
newDirectory.createDirectory();

结果一样,仍然会在Windows桌面上创建一个叫做我的AIR文件夹的目录,但是局限性就来了,因为你用这种方式只能工作在Windows操作系统里,假如你的应用中创建文件夹和文件是一个重要的工作(比如存储一个文件到某文件夹),你的应用在MACOSX系统里就完全不工作。有没有办法改正?有,用Flash Player API判断用户系统,然后用判断的结果值分开来写访问用户文件系统的逻辑,Win一套,MAC一套,Linux一套...乃至到未来的smartphone上一套,优点是灵活,缺点是代码工作量骤然提升。所以,推荐各位将访问文件系统的File对象尽量绑定在几个内置属性的映射路径上,既方便,又不用考虑目标系统,而且还友善,因为没有用户愿意你的AIR应用打开人家C盘windows文件夹去生成一个目录或新文件,MACOSX就好很多,因为要sudo才能获得某些文件夹的读写和创建删除权限。所以,AIR应用推荐使用File的几个默认内置静态属性,你好我好大家好,皆大欢喜。

好了,今天就到这里了。(刚跟中央2套早间节目中的马斌读报节目学的...:D)

  • quote 2.ibcu
  • 范例代码是针对flex编写的,可以同时给一份针对flash ide的范例吗?毕竟使用flash的人比使用flex的人多得多。。。
  • 2009-2-26 14:20:58 回复该留言
  • quote 3.7yue
  • http://www.7yue.com
  • flash的也一样,除了JS不太一样外。
    Flash CS4可以通过手动在场景添加一个Button,click事件触发同样的function,因为createDirectory方法里的File,来自Flash.filesystem类包。CS4和FB3都可以用。
  • 2009-2-26 14:31:16 回复该留言
  • quote 4.purple
  • 請問一下
    Gumbo中textLayout是封在swc中的。
    而如果說不使用Flex中的TextInput 組件而在純AS3環境下。
    看起來除了FP9的TextField以外并沒有提供別的可以供文本輸入的組件
    文本引擎里也沒找到相關定義。

    這樣的非FLEX輸入難道不存在?
  • 2009-2-26 17:15:00 回复该留言
  • quote 5.purple
  • 補充問一下。假設不存在這樣的類。
    那么Adobe TLF是使用TextField作為輸入基礎?還是別的實現

    按照目前的Adobe 的說法TextField已經不會被增強只留做向后兼容
    所以我感覺它并不會包含在新的Flex組件核心實現中。那么我就疑惑它是如何實現輸入呢。難道就必須使用MXML作為開發手段?
  • 2009-2-26 17:17:37 回复该留言
  • quote 6.baby
  • 问一下,SQLLITE数据库如何判断数据库有密码? 不会先OEPN不传密码,然后捕捉错误,在让用户输入密码重新OPEN把?
  • 2009-2-27 0:59:03 回复该留言
  • quote 7.passi0n
  • http://www.rgb123.net
  • 你好 请教个问题
    使用sdk flashdevelop打包air在不链接网络的情况下会报错Could not generate timestamp: timestamp.geotrust.com
    请问这种情况我该怎么解决
  • 2009-2-27 16:50:09 回复该留言

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Walle Build 91204

Copyright 2007 www.7yue.com. Some Rights Reserved.
京ICP备05064035号