
高级技术文档撰写工程师
Adobe
Text Editor 范例应用程序展示 Adobe AIR 的一些文件处理功能, 其中包括:
注意: 本范例应用程序按原样提供, 用于教学目的。

图 1。本范例应用程序是一个处理纯文本文件的简易编辑器。
注意: 本范例应用程序按原样提供, 用于教学目的。
若要充分利用本篇文章, 您需要以下软件和文件:
本范例应用程序包括以下文件:
应具备构建 HTML 应用程序的一般经验。有关使用此快速入门指南的详细信息, 请参阅用 HTML 构建快速入门范例应用程序。
下载并启动应用程序的安装程序 (TextEditorHTML.air), 从而安装此应用程序。此应用程序是一个处理纯文本文件的简易编辑器。此应用程序使用 UTF-8 编码读写所有文本文件。
有关使用 AIR 类的详细信息, 请参阅《为 HTML 开发人员提供的 Adobe AIR 语言参考》*。
init() 方法设置 defaultDir File 对象, 使其指向预定义的路径:
defaultDir = air.File.documentsDirectory;
此代码设置对象, 使其指向用户的文档目录。在 Windows 中, 此目录为“我的文档”。在 Mac OS X 中, 此目录为 /Users/userName/Documents。
如果用户尚未选择文件路径, 则 FileChooser 窗口稍后将引用 defaultDir 文件。
用户单击 Open (打开) 按钮时, openFileDB() 方法调用 File 对象的 browseForOpen() 方法, 从而打开一个新的文件浏览器对话框:
var fileChooser;
if(currentFile)
{
fileChooser = currentFile;
}
else
{
fileChooser = defaultDir;
}
fileChooser.browseForOpen("Open");
用户在主窗口中单击 Save As (另存为) 按钮时, saveAs() 方法调用类似的方法, 即 File 对象的 browseForSave() 方法:
var fileChooser;
if(currentFile)
{
fileChooser = currentFile;
}
else
{
fileChooser = defaultDir;
}
fileChooser.browseForSave("Save");
用户选择要打开的文件时, fileChooser File 对象调度 select 事件。将 openFile() 函数注册为此事件的事件侦听器。该函数设置一个新的 FileStream 对象, 名为 stream。
stream = new air.FileStream();
try
{
document.getElementById("mainText").value = "";
currentFile = event.target;
stream.open(currentFile, air.FileMode.READ);
var str = stream.readUTFBytes(stream.bytesAvailable);
stream.close();
document.getElementById("mainText").value = str;
document.title = "Text Editor - " + currentFile.name;
}
catch(error)
{
ioErrorHandler()
}
注意: 用于打开和读取文件的代码包含在 try/catch 结构中, 这样当出现 I/O 错误时就会调用 ioErrorHandler() 方法。
stream 对象的 open() 方法有两个参数:
READ, 表示允许读取数据。 readUTFBytes() 方法从文件读取 UTF-8 文本数据。向该方法的参数传递 stream.bytesAvailable, 这样即可读取整个文件。读取文件后, 将数据传递至页面的 mainText TEXTAREA 元素。
此示例使用 open() 方法, 该方法打开文件进行同步操作。还可以使用 openAsync() 方法打开文件进行异步操作。但是, 如果这样做, 则需要设置事件侦听器来处理 complete 和 ioError 事件。
当用户单击 Save (保存) 按钮时, 调用 saveFile() 方法。该方法设置一个新的 FileStream 对象, 名为 stream, 并向该文件写入数据。
try
{
stream = new air.FileStream();
stream.open(file, air.FileMode.WRITE);
var outData = document.getElementById("mainText").value;
outData = outData.replace(/\n/g, air.File.lineEnding);
stream.writeUTFBytes(outData);
document.title = "Text Editor - " + file.name;
}
catch(error)
{
ioErrorHandler()
}
用于打开和读取文件的代码包含在 try/catch 结构中, 这样当出现 I/O 错误时就会调用 ioErrorHandler() 方法。
stream 对象的 open() 方法有两个参数:
WRITE, 表示允许写入数据以及覆盖文件中的任何现有数据。 try 语句之后的第四行将 TEXTAREA 数据中的 \n 换行符替换为特定于平台的每行结尾字符, 该字符由 static File.lineEnding 属性表示:
outData = outData.replace(/\n/g, air.File.lineEnding);
writeUTFBytes() 方法向文件写入 UTF-8 文本数据。
此示例使用 open() 方法, 该方法打开文件进行同步操作。还可以使用 openAsync() 方法打开文件进行异步操作。但是, 如果这样做, 则需要设置事件侦听器来处理 outputProgress 和 ioError 事件。
使用异步操作可以在读写文件时 (异步地) 运行其它进程, 如图形化进度状态。