0

そうです、私はしばらくの間これに対する解決策を見つけようとしてきましたが、それは何らかの理由でうまくいかないだけです。

要するに、私がやりたいのは、ユーザーが入力したすべての入力文字列をファイルに保存することです。アクティビティが再度作成されるたびに、これらの文字列をオブジェクトの新しいインスタンスに再入力したいと思います。

このコードは、ファイルを作成してそこから情報を読み取るために使用するものであり、アクティビティのonCreate()メソッドで使用されます。

    try {

        String brain = "brain";
        File file = new File(this.getFilesDir(), brain);
        if (!file.exists()) {
            file.createNewFile();
        }      

        BufferedReader in = new BufferedReader(new FileReader(file));
        String s; // This feeds the object MegaAndroid with the strings, sequentially 
        while ((s = in.readLine()) != null) {
            MegaAndroid.add(s);
        }
        in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

その後、ユーザーがテキストを入力するたびに、文字列がファイルに保存されます。

    try {

        String brain = "brain";
        File file = new File(this.getFilesDir(), brain);
        if (!file.exists()) {
            file.createNewFile();
        }

    BufferedWriter out = new BufferedWriter(new FileWriter(file));
    out.write(message); // message is a string that holds the user input
    out.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

ただし、何らかの理由で、アプリケーションが強制終了されるたびに、データは失われます。私は何が間違っているのですか?

編集:また、別のクラスからこのファイルにアクセスする場合、どうすればよいですか?

4

2 に答える 2

1

表彰セクションで説明したように、コードの主な問題は、ファイルの切り捨て中FileWriterに操作の前に実行が発生したことです。FileReaderファイルの内容を維持するために、書き込み操作をappend:に設定します。

BufferedWriter out = new BufferedWriter(new FileWriter(file,true));
out.write(message);
out.newLine();
out.close();

ただし、EditTextのすべてのエントリが受信されてファイルに送信された場合は、その横にあるバイトごとにデータを書き込むだけです。似たような内容になりやすい

これは1行目ですこれは2行目です

希望の代わりに

これは1行目です
これは2行目です

これは、ファイルに書き込むたびにBufferedWriterに改行を渡すことで修正されます。

于 2013-02-06T17:20:57.490 に答える
1

これは私がファイルを読むために行うことです。

try{

        File sdCard = Environment.getExternalStorageDirectory();
        File dir = new File (sdCard.getAbsolutePath() + "/whereyouwantfile");
        dir.mkdirs();

        Log.d(TAG,"path: "+dir.getAbsolutePath());
        File file = new File(dir, "VERSION_FILENAME");

        FileInputStream f = new FileInputStream(file);

        //FileInputStream fis = context.openFileInput(VERSION_FILENAME);
        BufferedReader reader = new BufferedReader(new InputStreamReader(f));

        String line = reader.readLine();
        Log.d(TAG,"first line versions: "+line);
        while(line != null){
            Log.d(TAG,"line: "+line);
            //Process line how you need 
            line = reader.readLine();
        }

        reader.close();
        f.close();
    }
    catch(Exception e){
        Log.e(TAG,"Error retrieving cached data.");

    }

そして、以下を書くために

try{

        File sdCard = Environment.getExternalStorageDirectory();
        File dir = new File (sdCard.getAbsolutePath() + "/whereyouwantfile");
        dir.mkdirs();
        File file = new File(dir, "CONTENT_FILENAME");

        FileOutputStream f = new FileOutputStream(file);

        //FileOutputStream fos = context.openFileOutput(CONTENT_FILENAME, Context.MODE_PRIVATE);
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(f));

        Set<String> keys = Content.keySet();

        for(String key : keys){

            String data = Content.get(key);
            Log.d(TAG,"Writing: "+key+","+data);

            writer.write(data);
            writer.newLine();
        }

        writer.close();
        f.close();

    }
    catch(Exception e){
        e.printStackTrace();
        Log.e(TAG,"Error writing cached data.");

    }

他の国にファイルを表示させたくない場合は、プライベートモードを使用できますが、デバッグ時にファイルを表示すると便利なことがよくあります。

于 2013-02-06T16:46:05.783 に答える