0

アプリで使用するプライベート データを書き込むための初期テストとして、onCreate メソッド内でこのコードを実行しようとしています。このコードは、ここにある Android SDK 開発ガイドから直接引用したものです。

String FILENAME = "hello_file";
String string = "hello world!";

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
fos.write(string.getBytes());
fos.close();

ただし、このコードでは、下部にある 3 行のコードでエラーが発生します。エラーは未処理の例外です。推奨される迅速な修正は、次のことです。

    String FILENAME = "hello_file";
    String string = "hello world!";

    FileOutputStream fos;
    try {
        fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        fos.write(string.getBytes());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        fos.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

しかし、それを行った後、fosが初期化されていない可能性があることを示す下の2行のエラーが表示されます。このコードを修正するにはどうすればよいですか?

4

2 に答える 2

2

交換

FileOutputStream fos;

FileOutputStream fos = null;
于 2010-10-11T15:20:48.167 に答える
1

はい、ここでの問題は、FileNotFoundException が発生した場合に例外を出力して続行しようとすることですが、その場合、"openFileOutput" 呼び出しが完了していないため、fos 変数に値が割り当てられませんでした。 . ファイルを開くことができなかった場合、開いていないファイルへの書き込みを続行したくないため、これは問題ありません。

FileNotFoundException IS は IOException であるため、これらすべてを次のように単純化できます。

String FILENAME = "hello_file";
String string = "hello world!";

try {
    FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
    fos.write(string.getBytes());
    fos.close();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

この場合、最初に例外が発生すると、スタック トレースが出力され、try {} ブロックの残りの後続の操作はすべてスキップされます。

セメントの答えの問題は、コンパイラ エラーによって取得されますが、最初のブロックで例外がスローされた場合、2 番目のブロックで NullPointerException が発生することです。

于 2010-10-11T15:24:19.750 に答える