2017-02-08 2 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

관련 문제