2016-12-28 12 views
0

ログ用のファイルを作成しようとしていますが、ファイルを作成するときにファイルまたはディレクトリが見つかりませんでした。私は何が間違っているのか分かりません。これは、ファイルを作成するコードです。AndroidログファイルIO - ファイル/ディレクトリが見つかりませんエラー

File directory = new File(Environment.DIRECTORY_DOCUMENTS,"test"); 
    directory.mkdirs(); 

    File file = new File(directory, fileName.trim()+".txt"); 

    if(!file.exists()){ 
     try { 
      file.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return false; 
     } 

    } 

エラーは、createNewFile()によってスローされています。このエラーの原因は何ですか?

+0

マニフェストとドキュメントディレクトリに書き込み権限を追加しましたか? – Rahul

+0

はい、私はマニフェストに追加された読み書き権限を持っています。 – David

+0

ディレクトリ文書が存在しますか? – Rahul

答えて

0

この問題は、アプリが実行時に許可を要求していないためにgreenappsが示唆されたために発生しました。

0

まず、ドキュメントディレクトリを作成します。

File docDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS); 
    if (!docDir.exists()) { 
     if(docDir.mkdirs()) { 
     File directory = new File(docDir,"test"); 

    } else { 
    // Unable to create document directory. check Run time permissions 
    } 
} 
+0

'まずドキュメントディレクトリを作成します.'違う。標準のドキュメントディレクトリを使用します。 mkdirの戻り値を見るのも忘れてしまいます。 – greenapps

+0

mkdirs()はまだ偽を返しています – David

+0

@greenapps私の答えが更新され、ディレクトリ作成のチェックが追加されました – Rahul

0

通常のドキュメントディレクトリを取得するには、getExternalPublicDirectory(Environment.DIRECTORY_DOCUMENTS)を使用する必要があります。

directory.mkdirs(); 

盲目的にmkdirsを呼び出しません。ただし、ディレクトリが存在しない場合に限ります。そして、値の作成に失敗する可能性があるので、戻り値を確認してください。

+0

これを少しテストしました。 getExternalPublicDirectory(Environment.DIRECTORY_DOCUMENTS)はあなたの提案のようにDocumentsディレクトリにアクセスできますが、サブディレクトリを作成するときにmkdirを使用してもfalseを返します。私はmkdirとmkdirの両方を試しました。 – David

+0

どのAndroidバージョンが使用中ですか?マニフェストファイルに書き込み権限をリクエストしましたか?あなたはアンドロイド6以上の実行時にこれらのアクセス許可を確認するようにユーザーに要求するコードを追加しましたか? – greenapps

+0

私はこのようなディレクトリを作成しています:File directory = new File(getExternalPublicDirectory(Environment.DIRECTORY_DOCUMENTS)、 "test"); directory.mkdir()とdirectory.mkdirs()はともにfalseを返します。なぜディレクトリを作成できないのですか? – David

関連する問題