快速入门:读取和写入文件 (HTML)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
使用 StorageFile 对象读取和写入文件。
先决条件
了解使用 JavaScript 的 Windows 运行时应用的异步编程
在快速入门:在 JavaScript 中使用承诺中了解如何编写异步应用。
了解如何获取需要从其读取或写入到的文件
通过在快速入门:使用文件选取器访问文件中调用文件选取器,可以了解如何获取文件。
示例中使用的文件
这些示例中的所有代码均取自文件访问示例并依赖于该示例的全局 sampleFile
变量。此变量表示这些范例中该示例写入和读取自的文件 (sample.dat
)。
文件访问示例会创建 sample.dat
文件,并存储返回的 storageFile 对象,如下所示:
Windows.Storage.ApplicationData.current.localFolder.createFileAsync("sample.dat",
Windows.Storage.CreationCollisionOption.replaceExisting).then(function (file) {
sampleFile = file;
});
注意 在库中创建文件之前,必须在应用清单中声明必要的功能。要了解有关文件访问和功能的详细信息,请参阅文件访问和权限和使用 Windows 运行时对用户资源的访问。
写入文件
这些步骤显示了当你有一个可写入的文件以及一个表示该文件的 storageFile 时写入该文件的方法。
将文本写入文件
通过调用 fileIO 类的 writeTextAsync 方法,将文本写入文件。
文件访问示例展示了如何调用 writeTextAsync(file, contents) 来将一些随机文本写入其 sampleFile
,如下所示:
Windows.Storage.FileIO.writeTextAsync(sampleFile, "Swift as a shadow").then(function () {
// Add code to do something after the text is written to the file
});
尽管 writeTextAsync 方法没有返回值,但仍可以在将文本写入文件之后,使用 then 或 done 来声明函数并执行其他任务,如示例所示。
使用缓冲区将字节写入文件
获取要写入文件的字节的缓冲区。
例如,文件访问示例调用 convertStringToBinary 以获取基于随机字符串的字节缓冲区,如下所示:
var buffer = Windows.Security.Cryptography.CryptographicBuffer.convertStringToBinary( 'What fools these mortals be', Windows.Security.Cryptography.BinaryStringEncoding[''] );
通过调用 fileIO 类的 writeBufferAsync 方法,将字节从你的缓冲区写入文件。
文件访问示例展示了如何使用 writeBufferAsync 将字节从缓冲区写入其
sampleFile
,如下所示:Windows.Storage.FileIO.writeBufferAsync(sampleFile, buffer).then(function () { // Add code to do something after the text is written to the file });
尽管 writeBufferAsync 没有返回值,但仍可以在将文本写入文件之后,使用 then 或 done 来声明函数并执行其他任务,如示例所示。
使用事务处理流将文本写入文件
通过调用 storageFile.openTransactedWriteAsync 方法,打开到文件的流。打开操作完成后,它将返回文件的内容流。
文件访问示例展示了如何通过调用 storageFile.openTransactedWriteAsync 方法在文件 (
sampleFile
) 上打开流,如下所示:sampleFile.openTransactedWriteAsync().then(writeToStream);
确保声明某个函数(类似于
writeToStream
)以捕获transaction
(类型为 StorageStreamTransaction),以便可以在该方法完成之后写入到该文件,如下所示:function writeToStream(transaction) { // Add code to use the stream to write to your file }
使用这些步骤将代码添加到
writeToStream
函数,该函数将在 storageFile.openAsync 方法完成之后将文本写入到文件。使用
transaction
创建新的 dataWriter 对象并调用 dataWriter.writeString 方法,从而将文本写入流。文件访问示例展示了如何将文本写入流,如下所示:
var dataWriter = new Windows.Storage.Streams.DataWriter(transaction.stream); dataWriter.writeString("Swift as a shadow");
通过调用 dataWriter.storeAsync 和
transaction
.commitAsync 方法将文本保存到文件中并关闭流。文件访问示例展示了如何将文本保存到文件并关闭流,如下所示:
dataWriter.storeAsync().then(function () { transaction.commitAsync().done(function () { // Text in stream has been saved to the file transaction.close(); }); });
可以下载文件访问示例,查看函数内上下文中的代码示例。
从文件读取
这些步骤显示了当你有一个可读取的文件以及一个表示该文件的 storageFile 时从该文件读取的方法。
从文件读取文本
通过调用 fileIO 类的 readTextAsync 方法,从文件读取文本。
文件访问示例展示了如何通过调用 readTextAsync(file) 从某个文件的 sampleFile
进行读取,从而从该文件读取文本,如下所示:
Windows.Storage.FileIO.readTextAsync(sampleFile).then(function (contents) {
// Add code to process the text read from the file
});
可以使用 then 或 done 来声明函数以捕获和处理从文件读取的文本。在 readTextAsync 方法完成之后,会将该文本作为 String 对象(示例中的 contents
)传递给此函数。
通过使用缓冲区从文件读取字节
通过调用 fileIO 类的 readBufferAsync 方法,将字节从你的文件读入到缓冲区。
文件访问示例展示了如何通过调用 readBufferAsync 将字节从文件读入到缓冲区,如下所示:
Windows.Storage.FileIO.readBufferAsync(sampleFile).then(function (buffer) {
// Add code to process the text read from the file
});
可以使用 then 或 done 来声明函数以在 readBufferAsync 方法完成之后捕获和处理 buffer
(类型 IBuffer)数据。
例如,文件访问示例捕获 buffer
并使用 dataReader 对象来读取 buffer
的长度,如下所示:
Windows.Storage.FileIO.readBufferAsync(sampleFile).then(function (buffer) {
var dataReader = Windows.Storage.Streams.DataReader.fromBuffer(buffer);
var output = dataReader.readString(buffer.length);
});
当然,以这种方式读取 buffer
的长度不是特别有用,但你可以自由地、更有创造性地处理 buffer
。你可能会查看一下 dataReader 类中提供的方法,以获得对可以进行哪些事项的更多想法。
使用流从文件读取文本
通过调用 storageFile.openAsync 方法,从文件打开流。打开操作完成后,它将返回文件的内容流。
文件访问示例展示了如何通过调用 storageFile.openAsync 方法在文件 (
sampleFile
) 上打开流,如下所示:sampleFile.openAsync(Windows.Storage.FileAccessMode.readWrite).then(readFromStream);
确保声明某个函数(类似于
readFromStream
)以捕获流(类型 IRandomAccessStream),以便可以在该方法完成之后从该流进行读取,如下所示:function readFromStream(readStream) { // Add code to use the stream to read text from your file }
使用这些步骤将代码添加到
readFromStream
函数,该函数将在 storageFile.openAsync 方法完成之后从文件读取文本。从
readStream
获取要读取的 dataReader 对象。文件访问示例展示了如何获取 dataReader,如下所示:
var dataReader = new Windows.Storage.Streams.DataReader(readStream);
通过调用 dataReader.loadAsync 和 dataReader.readString 方法读取文本。
文件访问示例展示了如何读取文本,如下所示:
dataReader.loadAsync(readStream.size).done(function (numBytesLoaded) { var fileContent = dataReader.readString(numBytesLoaded); // Process text read from the file dataReader.close(); });
可以下载文件访问示例,查看函数内上下文中的代码示例。
摘要和后续步骤
现在,如果你有一个表示某个文件的 storageFile,应了解如何从该文件读取和写入。
若要了解使用图像文件的信息,请参阅如何选择和显示图像或如何解码图像以及使用 Blob 保存和加载内容示例。
相关主题
参考
Windows.Storage.StorageFile class