2017-02-08 15 views
0

私は実際に私のために働くファイル書き込み機能を見つけるために数時間インターネットを検索してきました。これまでのところ、私は私のMainActivity.javaでこれを持っている:かなりイライラ私はアプリを実行し、WRITETOFILEを(呼び出すときものの外部記憶装置にファイルを書き込む手助けが必要

<?xml version="1.0" encoding="utf-8"?> 
<manifest package="my.package.application"xmlns:android="http://schemas.android.com/apk/res/android"> 

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

<application 

    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 

    </activity> 
    <activity android:name=".Menu_activity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 

      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 
    </activity> 
</application> 

)それを:

public void writeToFile(String data, Context ctx) { 
    File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS); 
    File tempFile = new File(path, "houseDataFile.txt"); 
    if(!tempFile.exists()){ 
     tempFile.mkdirs(); 
    } 
    try 
    { 
     FileOutputStream fOut = new FileOutputStream(tempFile); 
     fOut.write(data.getBytes()); 
     fOut.close(); 
     Toast.makeText(ctx, "Saved", Toast.LENGTH_SHORT).show(); 
    }catch (Exception e) 
    { 
     Log.w(TAG, "FileOutputStream exception: - " + e.toString()); 
    } 
} 

私のアンドロイドマニフェストには、両方の権限が含まれています

W/MainActivity: FileOutputStream exception: - java.io.FileNotFoundException: /storage/emulated/0/Documents/houseDataFile.txt: open failed: ENOENT (No such file or directory) 

何か助けていただければ幸いです。前もって感謝します。

+0

'/ storage/emulated/0/Documents'は存在しますか? –

+0

あなたのデバイスのAndroidバージョンは6.x.x以上ですか(Marsh Mallow)ですか? – tahsinRupam

+1

は、今、数時間インターネットを検索していました。あなたがアンドロイドをタグ付けしたいくつかのstackoverflowページを読んでいたなら、あなたの問題が何度か報告されているはずです。毎週何度か。 – greenapps

答えて

0

私はあなたがメソッドを実行している間に実行時アクセス権を要求しないため、ファイルパスを取得できないと仮定しています。ここでは、以下のコードを見ることができます。

まず、端末のOSバージョンがLollipopを超えているかどうかを確認します。上記の場合は、許可のポップアップダイアログを表示します。

final int MyVersion = Build.VERSION.SDK_INT; 
if (MyVersion > Build.VERSION_CODES.LOLLIPOP_MR1) 
{ 
    if (!checkIfAlreadyhavePermission()) 
    { 
     ActivityCompat.requestPermissions(ProfileActivity.this, new String[] {android.Manifest.permission.READ_EXTERNAL_STORAGE}, 1); 
    } 
    else 
    { 
     writeToFile(data, ctx); 
    } 
} 
else 
{ 
    writeToFile(data, ctx) 
} 

private boolean checkIfAlreadyhavePermission() { 
    int result = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE); 
    return result == PackageManager.PERMISSION_GRANTED; 
} 

次に、OnRequestPerMissionResult()で「許可」ボタン機能と「拒否」ボタン機能を定義します。

public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case 1: { 
       // If request is cancelled, the result arrays are empty. 
       if (grantResults.length > 0 
         && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        writeToFile(data, ctx); 

       } else { 
        Toast.makeText(YourActivity.this, "Please provide permission", Toast.LENGTH_LONG).show(); 
       } 
       break; 
      } 
    } 

これが問題を解決するかどうかお知らせください。

+0

エラーが発生しました: 'FileOutputStream exception: - java.io.FileNotFoundException:/storage/emulated/0/Documents/houseDataFile.txt:open failed:EISDIR(ディレクトリです)'。私は、内部ストレージに書き込んでみて、それがまったく役に立っているかどうかを調べるつもりです。 – Pixelknight1398

+0

WRITE PERMISSIONでも試しましたか? – tahsinRupam

関連する問題