1

私は、友人と私が独自の仮想フラッシュカードを作成できるようにするための小さなアプリケーションに取り組んできました。これらのカードは、Spinner -s 経由でアクセスできるようにマップされたテキスト ファイルに配置されます。アプリケーションのユーザーは、独自のスピナーを定義し、研究のカテゴリを定義します。

アクティビティが最初に開始されると、Scannerを使用してSpinnersTXT.txtというテキスト ファイルから読み込み、1 行ずつ実行し、Name-Type-Elements の厳密な構文を受け入れて、ファイルで定義されたSpinnerをインスタンス化します。 . しかし、それは正確には重要ではありません。私は実際にスキャナーを使用してファイルから読み込んだだけです

後で新しいスピナーを追加すると、その情報がテキスト ファイルに追加されます。コードを実行すると、例外処理でカバーされていないものに関連するエラーは発生しませんが、新しい Spinner-info が TXT ファイルに追加されていないか、スキャナーが正しいファイルにアクセスしていないことがわかっています。 Spinner オブジェクトは追加されていません (親ScrollViewへのaddView呼び出しを覚えていました)。

これが私のファイルパスの設定です。最初は空のtxtファイルが含まれるSavesフォルダーがあります

--> まず最初に、これが内部ストレージの使用方法であるかどうかを尋ねなければなりません。アプリ内からこのファイルにアクセスして編集したいのですが、この配置でよろしいですか?

さらに、ファイルにアクセスして、存在しない場合は作成するためのコードを次に示します。これは別のstackoverflowの質問から導き出しました(私は調査を行いました)が、いくつかの検証に感謝します。

try{
        fileProcessorScanner = new Scanner("Saves/SpinnersTXT.txt");

    }catch(Exception e){
        e.printStackTrace();
        File path = new File(getFilesDir(),"Saves");
        path.mkdirs();
        File SpinnersTXT = new File(path,"SpinnersTXT.txt");
    }

--> このコードはファイルを正常に取得できますか? ファイルが存在しない場合、キャッチはファイルを作成しますか? 申し訳ありませんが、私は IO を初めて使用しますが、初心者向けの本の章を読んだ後でも、非常に多くの形式の入力と出力を目にするので、簡単に困惑してしまいます...しかし、nextLine() メソッドにはスキャナーを使用する必要があると感じています。にもかかわらず、ほとんどの例は Scanner に触れていません。

最後に、そのファイルに書き込もうとするコードを次に示します (存在しない場合は、キャッチによって作成されます)。

outGoingSpinners = openFileOutput("SpinnersTXT.txt",MODE_WORLD_READABLE);
        outGoingSpinners.write(NEW_SPIN_OPEN.getBytes());
        outGoingSpinners.write(tempNewSpinnerName.getBytes());
        outGoingSpinners.write(tempNewSpinnerType.getBytes());
        outGoingSpinners.write(tempNewSpinnerInitializer.getBytes());
        outGoingSpinners.write(NEW_SPIN_CLOSE.getBytes());
        outGoingSpinners.close();

--> 情報は上記と同じテキスト ファイルに保存されますか? エスケープ シーケンスは尊重され、保持されますか?

すべての助けに心から感謝します。皆さんはとても洞察力に富んでおり、このコミュニティは私の夢の多くを実現してくれました。特にさまざまな形式の IO と言語のニュアンスについて、私は迷子になり、頭がいっぱいになることがあります。皆さん、ありがとうございました。

4

1 に答える 1

1

同様の質問で説明したように、ソース プロジェクトの下の任意の場所にファイルを配置して、それらがデバイス上で表示されることを期待することはできません。アセットなどのメカニズムを使用してデータを保存できますが、実行時には読み取り専用になります。初期化されたデータを変更可能にするには、それを読み取り専用の形式でパッケージ化し、それをファイルシステムにコピーして変更可能なバージョンを作成する必要があります。または、さまざまな方法を使用して実行時にダウンロードできます。

これは、特にデータベースに関する多くの質問で詳細に説明されていますが、そこに示されている解決策は基本的にあらゆる種類のファイルに共通です。

于 2014-03-08T17:36:40.017 に答える