辅助功能*

Robert Dixon

Jeff Swartz

高级技术文档撰写工程师
Adobe

出版日期:
2008 年 2 月 28 日
用户级别:
中/高级
产品:
Adobe AIR

构建文本文件编辑器

Text Editor 范例应用程序展示 Adobe AIR 的一些文件处理功能, 其中包括:

  • 设置 File 对象, 使其指向某个文件路径。
  • 使用 FileMode 和 FileStream 类从文件读取数据。
  • 使用 FileMode 和 FileStream 类向文件写入数据。

注意: 本范例应用程序按原样提供, 用于教学目的。

Text Editor 应用程序

图 1。本范例应用程序是一个处理纯文本文件的简易编辑器。

注意: 本范例应用程序按原样提供, 用于教学目的。

要求

若要充分利用本篇文章, 您需要以下软件和文件:

Adobe AIR

Adobe AIR SDK

范例文件:

本范例应用程序包括以下文件:

  • Index.html: 应用程序主要内容。
  • AIRAliases.js: AIR JavaScript 别名文件
  • Application.xml: 用于 (使用 ADL 和 ADT) 调试和构建应用程序的 AIR 应用程序描述符文件。
  • AIR 图标文件范例

必备知识

应具备构建 HTML 应用程序的一般经验。有关使用此快速入门指南的详细信息, 请参阅用 HTML 构建快速入门范例应用程序

测试应用程序

下载并启动应用程序的安装程序 (TextEditorHTML.air), 从而安装此应用程序。此应用程序是一个处理纯文本文件的简易编辑器。此应用程序使用 UTF-8 编码读写所有文本文件。

了解代码

有关使用 AIR 类的详细信息, 请参阅《为 HTML 开发人员提供的 Adobe AIR 语言参考》*

将 File 对象指向文件

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() 方法有两个参数:

  • 第一个参数是要打开的 File 对象, 在本例中即为应用程序中的 file 主对象。
  • 第二个参数是 FileMode 类的常量之一所定义的文件模式, 在本例中该常量为 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() 方法有两个参数:

  • 第一个参数是要打开的 File 对象, 在本例中即为应用程序中的 file 主对象。
  • 第二个参数是 FileMode 类的常量之一所定义的文件模式, 在本例中该常量为 WRITE, 表示允许写入数据以及覆盖文件中的任何现有数据。

try 语句之后的第四行将 TEXTAREA 数据中的 \n 换行符替换为特定于平台的每行结尾字符, 该字符由 static File.lineEnding 属性表示:

outData = outData.replace(/\n/g, air.File.lineEnding);

writeUTFBytes() 方法向文件写入 UTF-8 文本数据。

此示例使用 open() 方法, 该方法打开文件进行同步操作。还可以使用 openAsync() 方法打开文件进行异步操作。但是, 如果这样做, 则需要设置事件侦听器来处理 outputProgressioError 事件。

使用异步操作可以在读写文件时 (异步地) 运行其它进程, 如图形化进度状态。

关于作者

Jeff Swartz 于 1992 年开始他在 Macromedia (现在为 Adobe Systems)的职业生涯。目前, 他是一名 Adobe AIR 技术文档撰写工程师。Jeff 拥有伊利诺斯大学乌尔班纳-香巴尼分校的计算机科学与数学专业学士学位, 并曾就读于爱丁堡大学人工智能系。旧金山湾地区附近的听众都曾“领略”过 Jeff 在长号演奏方面的艺术风采。他还曾是 Vienna Beef Ltd. 的 Big Frank (舞蹈高手)。