0

Android アプリケーション (Target API 11) でSD カード ストレージへの書き込みを試しています。

「BPAExp_data」と呼ばれる次のコードでディレクトリの作成に成功しましたが、新しいファイルはまったく作成されません。logcatに表示されないので、なぜだろうと困惑しています!!.

これが私の onCreate() メソッドです

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_text_logger);
    String data = "asdfghjkl.."

    //The filename of the log file
    filename = getIntent().getExtras().getString("Filename");

    //Save Test data button
    Button saveData = (Button)findViewById(R.id.saveDataButton);
    saveData.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
        // Save Data in file and go back to home screen
        addtoKeyLogFile(data);              

        //Make intent for the Main Activity screen
        Intent main_intent = new Intent(TextLogger.this, MainActivity.class);
        startActivity(main_intent);
        }
    });

これは addKeyLogFile() と呼ばれる私のメソッドです

    public void addtoKeyLogFile(String data){       
    FileOutputStream f = null;
    File data_file;
    try {
        File sdCard = Environment.getExternalStorageDirectory();
        File dir = new File (sdCard.getAbsolutePath() + "/BPAExp_data");
        dir.mkdirs();
        data_file = new File(dir, filename);
        f = new FileOutputStream(data_file);
        // if file doesn't exists, then create it
        if (!data_file.exists()) {
            data_file.createNewFile();
            Toast.makeText(TextLogger.this, "File GOT CREATED!", Toast.LENGTH_SHORT).show();
        }

        // get the content in bytes
        byte[] dataInBytes = data.getBytes();

        f.write(dataInBytes);
        f.flush();
        f.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
        Log.d("TextLogger onCreate: ", e.getMessage());
    } catch (IOException e) {
        e.printStackTrace();
        Log.d("TextLogger onCreate: ", e.getMessage());
    } finally {
        try {
            if (f != null) {
                f.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

私は、問題が

    f = new FileOutputStream(data_file);

トーストメッセージをその後に置くと実行されませんが、トーストを前に置くと実行されます! また、その後の意図は完全に正常に機能します! しかし、私は理解していません、なぜそれが機能していないのですか?

誰でも提供できる助けをありがとう!

4

1 に答える 1

1

ファイルには複数のコンストラクターがあります。1つはパラメータとしてファイルと文字列を取ります:

File dir = new File (sdCard , "BPAExp_data");
dir.mkdirs();
data_file = new File(dir, filename);

ファイル名の値は何ですか?

それらの行を削除します。

   if (!data_file.exists()) {
          data_file.createNewFile();
          Toast.makeText(TextLogger.this, "File GOT CREATED!", Toast.LENGTH_SHORT).show();
   }

ファイルの書き込みを停止すると、ファイルが作成されます。

 f.close();

あなたはそれを二度呼びます。最終ブロック内にのみ残してください

全体として、あなたは何か書くものがあると確信していますか?

byte[] dataInBytes = data.getBytes();

の長さはdataInBytes > 0

于 2013-01-22T14:45:00.910 に答える