2017-06-03 12 views
0

私はこのコードを使用して、電話機の外部ストレージにファイルを作成しています。マニフェストファイルの読み書きの権限を設定していることに注意してください。電話機の外部ストレージにファイルが作成されていません

SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); 
Date now = new Date(); 
String fileName = formatter.format(now) + ".txt"; //like 20170602.txt 

File directory = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); 
File file = new File(directory, fileName); 

String bodyOfFile = "Body of file!"; 
FileOutputStream fos = null; 
try { 
    fos = new FileOutputStream(file); 
    fos.write(bodyOfFile.getBytes()); 
    fos.close(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

私のLogCatは以下のとおりです。その特定の場所にファイル20170602.txtが表示されません。私のDownloadフォルダには、その名前のファイルはありません。私がどこに間違って行ったか教えてもらえますか?

D/tag: Directory: /storage/emulated/0/Android/data/com.pc.tab/files/Download 
D/tag: File: /storage/emulated/0/Android/data/com.pc.tab/files/Download/20170605.txt 

UPDATE

私はこのアプリを実行するためのMOTOのG4を使用しています。内部ストレージにファイル20170602.txtが見つかりました。

File Manager --> `LOCAL` tab (Upper right) --> Internal Storage --> Android --> data --> com.pc.tab --> files --> Download --> 20170602.txt 
+0

はe.printStackTrace(から任意のログがありますか)? –

+0

質問 - [API> 22の場合はアクセス許可を要求/保護しましたか](https://developer.android.com/training/permissions/requesting.html)しましたか? (ディレクトリをダウンロードするのに必要ではないかもしれません。)また、キャッチャーに何かエラーがありますか? – fattire

+0

printStackTraceからのエラーログはありません。 @ A.Edwar – Chip

答えて

1

ディレクトリとファイル自体のコードで

File directory = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); 
File file = new File(directory, fileName); 

mkdirsがあなたのファイルがあることになるので、あなたは、そのエラーを上書きたいとしているファイルのmkdirsを呼び出すを分離することが重要ですaディレクトリ。ディレクトリのmkdirsを呼び出すと、そのディレクトリが存在しない場合に作成され、このファイルの新しいFileOutputStreamオブジェクトを作成すると自動的にファイルが作成されます。

あなたのコードは次のようになります。

SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd"); 
Date now = new Date(); 
String fileName = formatter.format(now) + ".txt"; //like 20170602.txt 

File directory = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); 
File file = new File(directory, fileName); 

String bodyOfFile = "Body of file!"; 
FileOutputStream fos = null; 
try { 
    fos = new FileOutputStream(file); 
    fos.write(bodyOfFile.getBytes()); 
    fos.close(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

それを得ました。更新された質問をご覧ください。 getExternalFilesDirはSD Cardの内部ストレージのためにいつも 'ExternalStorage'を見たことがありました。しかし私の電話では、それは私の更新された質問に記載されているように内部ストレージで作成されました。どのくらい真実ですか?または私は内部ストレージが間違っていると思いますか? – Chip

関連する問題