クイック スタート: ファイルの読み取りと書き込み (HTML)
[ この記事は、Windows ランタイム アプリを作成する Windows 8.x および Windows Phone 8.x 開発者を対象としています。Windows 10 向けの開発を行っている場合は、「最新のドキュメント」をご覧ください]
StorageFile オブジェクトを使ってファイルの読み取りと書き込みを行います。
必要条件
JavaScript を使った Windows ランタイム アプリの非同期プログラミングについての理解
非同期アプリの作成方法については、「クイック スタート: JavaScript での promise の使用」をご覧ください。
読み取りや書き込みの対象となるファイルを取得する方法についての知識
ファイル ピッカーを呼び出してファイルを取得する方法については、「クイック スタート: ファイル ピッカーによるファイルへのアクセス」をご覧ください。
この例で使うファイル
この例に含まれるすべてのコードは、ファイル アクセスのサンプルから引用しており、サンプルのグローバル 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);
このメソッドが完了した後にファイルへの書き込みができるように、次のように
transaction
(StorageStreamTransaction 型) をキャプチャする関数 (例:writeToStream
) を宣言してください。function writeToStream(transaction) { // Add code to use the stream to write to your file }
これらの手順を使って、storageFile.openAsync メソッドの完了後にファイルへのテキストの書き込みを行う
writeToStream
関数をコードに追加します。新しい dataWriter オブジェクトを作って dataWriter.writeString メソッドを呼び出し、
transaction
を使ってテキストをストリームに書き込みます。ファイル アクセスのサンプルでは、テキストをストリームに書き込む方法が次のように示されています。
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
});
readBufferAsync メソッドが完了した後で、then または done を使って関数を宣言し、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);
メソッドが完了した後にファイルからの読み取りができるように、次のようにストリーム (IRandomAccessStream 型) をキャプチャする関数 (例:
readFromStream
) を宣言してください。function readFromStream(readStream) { // Add code to use the stream to read text from your file }
これらの手順を使って、storageFile.openAsync メソッドの完了後にファイルからテキストの読み取りを行う
readFromStream
関数をコードに追加します。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 を使ってコンテンツの保存と読み込みを行うサンプルをご覧ください。
関連トピック
クイック スタート: ファイル ピッカーによるファイルへのアクセス
Blob を使ってコンテンツの保存と読み込みを行うサンプルに関するページ
辞書/リファレンス
Windows.Storage.StorageFile class