4

「filename.txt」という名前の新しいファイルに書き込もうとしており、アプリを開いたときに「こんにちは」と書き出そうとしています。どうすればいいですか?このコードを Eclipse で実行し、F11 キーを押して AVD を開き、アプリをクリックします。「Hello World, appname!」というメッセージが表示されます。メッセージが表示されますが、ファイルは作成されません。

package com.paad.comparison;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Environment;
import android.widget.Toast;

public class ComparisonOfControlCreationActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
        String string1 = "Hey you";
        FileWriter fWriter;
        try{
            fWriter = new FileWriter("filename.txt", true);
            fWriter.write("hi");
            fWriter.flush();
            fWriter.close();
        } catch(Exception e) {
            e.printStackTrace();
        }

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

編集: 将来この問題に遭遇した場合は、 AndroidManifest.xml ファイルに次の行があることを確認してください。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
4

2 に答える 2

6

このようにしてみてください:

FileWriter fWriter;
File sdCardFile = new File(Environment.getExternalStorageDirectory() + " \filename.txt");
Log.d("TAG", sdCardFile.getPath()); //<-- check the log to make sure the path is correct.
try{
     fWriter = new FileWriter(sdCardFile, true);
     fWriter.write("hi");
     fWriter.flush();
     fWriter.close();
 }catch(Exception e){
          e.printStackTrace();
 }
于 2012-07-08T20:54:49.210 に答える
3

sync()ファイルを閉じる前に を呼び出す必要がありますが、FileDescriptorそのためには が必要であり、 から直接利用できるとは思えませんFileWriter。ただし、 をFileWriter使用してオブジェクトを作成しFileDescriptorFileOutputStreamこの目的のために提供することができます。

以下は最初のコードに基づいていますが、私の例ではファイルを SD カードに保存することを選択したため、アプリ マニフェストと同じように以下のコードを実行するには、タグの前に正しいアクセス許可を追加する必要があります<application>

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

とはいえ、ファイルをデバイスに直接保存する場合、結果は影響を受けません。

コード (Desire HD でテスト済み):

package com.paad.comparison;

import java.io.FileOutputStream;
import java.io.FileWriter;

import android.app.Activity;
import android.os.Bundle;

public class ComparisonOfControlCreationActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        String string1 = "Hey you";

        FileOutputStream fos ;

        try {
            fos = new FileOutputStream("/sdcard/filename.txt", true);

            FileWriter fWriter;

            try {
                fWriter = new FileWriter(fos.getFD());
                fWriter.write("hi");
                fWriter.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                fos.getFD().sync();
                fos.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

最後に、flush()によって呼び出されるように、 の直前close()の呼び出しは不必要ですが、有害ではありません。flush()close()

于 2012-07-12T16:11:56.370 に答える