2016-04-25 116 views
0

我試圖創建一個文本文件並插入文本。 我添加的權限清單:創建一個文件並在android中插入文本

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

但是當我試圖打開一個文件,並插入測試:

int permission = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); 

    if (permission != PackageManager.PERMISSION_GRANTED) { 
     // We don't have permission so prompt the user 

    } 
    File file = new File(Environment.getExternalStorageDirectory(), "myfile.txt"); 
    try { 

     FileOutputStream stream = new FileOutputStream(file); 
     stream.write("test".getBytes()); 
     stream.close(); 
    } catch (FileNotFoundException e) { 

     e.printStackTrace(); 

    } catch (IOException e) { 

     // TODO Auto-generated catch block 
     // FragmentTools.alertbox(getActivity(), "erreur d'écriture");; 
    } 

我有這些錯誤:

java.io.FileNotFoundException: /storage/1B0C-330F/monfichier.txt: open failed: EACCES (Permission denied) 

回答

0

你所創建的文件在獲得許可之前,您應該將退回;

if (permission != PackageManager.PERMISSION_GRANTED) { 
    // We don't have permission so prompt the user 
     return; // or prompt a message 
} 
0

後,您正促使在

if (permission != PackageManager.PERMISSION_GRANTED) { 
     // We don't have permission so prompt the user 

    } 

正確的用戶?因爲你沒有粘貼代碼...如果你不知道怎麼做,看看從谷歌這個樣本:

https://github.com/googlesamples/android-PermissionRequest

這將極大地幫助你。

另一個注意事項:如果您在API 23或更高版本上運行您的應用程序(它看起來像您),您必須在運行時請求權限。再次,請參閱谷歌示例,它顯示瞭如何做到這一點。

0

使用下面的代碼來創建文本文件並將數據插入到該文件中。

這是工作和測試

public void generateTxtOnSD(Context context) { 
    try { 
     File root = new File(Environment.getExternalStorageDirectory(), "Notes"); 
     if (!root.exists()) { 
      root.mkdirs(); 
     } 
     File gpxfile = new File(root, "YOUR FILE NAME"); 
     FileWriter writer = new FileWriter(gpxfile); 
     writer.append("CONTENT TO INSERT"); 
     writer.flush(); 
     writer.close(); 
     Toast.makeText(context, "Txt Saved", Toast.LENGTH_SHORT).show(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

由用戶或不給予調用此函數檢查權之前。

對於這一點,使用PermissionAcceptorlibrary

0

最後它的工作原理與此代碼:

private void save(String string) { 
    Activity act = getActivity(); 
    try { 
     FileOutputStream stream = act.openFileOutput("myfile.txt", Context.MODE_PRIVATE); 
     stream.write(string.getBytes()); 
     stream.close(); 
    } catch (FileNotFoundException e) { 

     FragmentTools.alertbox(getActivity(), "file not found"); 
    } catch (IOException e) { 

     FragmentTools.alertbox(getActivity(), "can't write "); 
    } 

} 
相關問題