質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.36%

  • JavaScript

    18774questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Monaca

    1048questions

    「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

  • Cordova

    450questions

    Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。

PERSISTENTに保存したテキストファイルの内容を取得したい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 780

agepan

score 54

Monacaを使用して、PERSISTENT領域に保存したテキストファイル(abc.txt)の内容を取得したいと考えております。

テキストファイルの内容は配列で、配列をテキストファイルへ書き出すことと、保存したテキストファイルのURL(file://〜〜/documents/abc.txt)を取得するところまではできました。

調べますとファイルAPIのページにて、以下のコードを用いることでテキストファイルの中身を取得できるようなのですが、具体的にこのコードをさらにどう書き換えれば上記目的を達成できるか何とも分からず、お知恵を拝借できればと思います。

よろしくお願いいたします。

function readFile(fileEntry) {

    fileEntry.file(function (file) {
        var reader = new FileReader();

        reader.onloadend = function() {
            console.log("Successful file read: " + this.result);
            displayFileData(fileEntry.fullPath + ": " + this.result);
        };

        reader.readAsText(file);

    }, onErrorReadFile);
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

PERSISTENT領域はiosとAndroidで異なります。
私の環境はiosですので、Documents/配下となるので「cordova.file.documentsDirectory」を指定します。
フォルダの詳細についてはリンク内容を参照してください。

function abcTXT() {
  var filename = 'abc.txt';

  var folderurl = cordova.file.documentsDirectory;
  // サブディレクトリの場合は後ろに付加します
  // var folderurl = cordova.file.documentsDirectory + 'subdir-id/';

  window.resolveLocalFileSystemURL( folderurl ,
    function getDirectoryEntry( directoryEntry ) {  
      directoryEntry.getFile( filename, null,
        function readFile( fileEntry ) {
          fileEntry.file(
            function( file ) {
              var reader = new FileReader();
              reader.onloadend = function() {
                alert("Successful file read: " + this.result);
                displayFileData(fileEntry.fullPath + ": " + this.result);
              };
              reader.readAsText(file);
            },  
            function fail(e) {
              // エラー処理
            }  
          );
        },
        function fail(e) {
          // エラー処理
        }  
      );
    },
    function fail(e) {
      // エラー処理
    }  
  );
};

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/08/24 21:22

    バッチリです!テキストファイルから内容を取得してアラートで確認することができました!サブディレクトリの記述もありがとうございます、とても役立ちます!

    AndroidでもPERSISTENT領域(内蔵ストレージ)に保存したいと思いますが、その場合はcordova.file.dataDirectoryを用いればいいと言うことでしょうか?
    調べたところ、cordova.file.dataDirectoryのdocuments以下にデータを置けば良い?らしいです。

    その場合は var folderurl = cordova.file.dataDirectory + 'documents/'; と記述することになるのかなと思います。

    キャンセル

0

保存したテキストファイルのURL(file://〜〜/documents/abc.txt)を取得するところまで

のソースがあれば説明しやすいのですが、

  var filename = 保存したテキストファイルのURL;
  directoryEntry.getFile(filename, null, 

    function readFile(fileEntry) {

      fileEntry.file(function (file) {
        var reader = new FileReader();

      ・・・・・・・


勿論、directoryEntryを取得する為の window.requestFileSystem か window.resolveLocalFileSystemURL が必要です。

回答になっていますか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/08/23 21:14

    保存したテキストファイルのURLを取得するというのは、PERSISTENT領域に保存したファイルURL一覧を取得できたという意味でありました。テキストファイルの名前(abc.txt)は決めうちなので、それでURL(フルパス)が分かっているということですね。

    お教え頂いたコードでさらに弄ってみたのですが(合ってるのか全く未知数ですが…)、ReadFileのエラーが出て立ち往生してしまいました。HTML上のボタンを押すとabcTXT()が実行され、テキストファイルの中身がアラートで表示されてくれれば…と思いつつ弄ってみたものです。

    function abcTXT(){
    var filename = 'abc.txt';
    window.resolveLocalFileSystemURL("cdvfile://localhost/persistent/",
    function(dir){
    dir.getFile(filename, null,
    function readFile(fileEntry) {
    fileEntry.file(function (file) {
    var reader = new FileReader();

    reader.onloadend = function() {
    alert("Successful file read: " + this.result);
    displayFileData(fileEntry.fullPath + ": " + this.result);
    };

    reader.readAsText(file);

    }, onErrorReadFile);
    }
    );
    }
    );}

    キャンセル

同じタグがついた質問を見る

  • JavaScript

    18774questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Monaca

    1048questions

    「Monaca」はiOS、Android、Windows向けのアプリ開発に対応した、Cordovaベースのモバイルアプリ開発プラットフォームです。HTML5、JavaScriptといったWeb標準技術を用いてモバイルアプリ開発を行うことができます。

  • Cordova

    450questions

    Cordovaは様々なデバイスで使うことができるオープンソースなモバイル用開発プラットフォームです。開発者に各デバイスの元のプラットフォームで開発する必要をなくし、HTML・JavaScript・CSSなどの一般的なウェブのテクノロジーを使ってすべてのデバイスで展開することができるモバイルのアプリケーションを生成することを可能にします。