2013-01-23 20 views
8

Tôi đang cố gắng viết một tập tin vào SDCard, nhưng tôi nhận được lỗi trong logcat:Permission denied khi writting vào sdcard

01-24 09:03:33.647: W/System.err(3353): java.io.FileNotFoundException: /mnt/sdcard/fun/itisfun.txt: open failed: EACCES (Permission denied) 
    01-24 08:24:28.007: W/System.err(3353): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied) 
    01-24 09:03:33.756: W/System.err(3353):at libcore.io.Posix.open(Native Method) 

Và đây mã của tôi để viết vào SDCard:

File root = null;  
try { 
    // check for SDcard 
    root = Environment.getExternalStorageDirectory();     
    Log.i(TAG,"path.." +root.getAbsolutePath()); 

    //check sdcard permission 
    if (root.canWrite()){ 
     File fileDir = new File(root.getAbsolutePath()+"/fun/"); 
     fileDir.mkdirs(); 

     File file = new File(fileDir, "itisfun.txt"); 
     FileWriter filewriter = new FileWriter(file); 
     BufferedWriter out = new BufferedWriter(filewriter); 
     out.write("I m enjoying......dude"); 
     out.close(); 
    } 
} catch(...) { 
    ... 
} 

Tệp kê khai:

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

Trả lời

9

Để ghi vào Sdcard bạn cần cấp quyền trong tệp kê khai

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

eish! xấu của tôi Tôi cũng đã làm điều đó, và tôi nhận được lỗi cho tôi cập nhật câu hỏi của tôi – zaamm

4

Bạn cần phải chắc chắn rằng bạn có sự cho phép @Ram đề cập, Thẻ SD được gắn kết. Bạn có thể kiểm tra nếu nó được gắn kết bằng cách: -

if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) 

Bạn nên xử lý một thẻ chưa lắp ráp một cách duyên dáng, nhưng một Gotcha chung là nếu điện thoại của bạn đã được cắm vào thông qua cáp USB bạn có thể có nó gắn qua hệ điều hành máy tính để bàn của bạn, có nghĩa là nó không được gắn kết bởi Android.

Cảm ơn,

Ryan

+0

Tôi vẫn còn có một vấn đề tương tự – zaamm

+0

Vâng ngoại lệ ban đầu là FileNotFoundException, bạn có chắc là tập tin đó không? Bạn có thể đăng nhật ký nếu họ đã thay đổi không? – Ryan

+0

Không thay đổi Ryan – zaamm

0

Dưới đây là một chút mã tôi sử dụng,

public void yourMethod(){ 

File root = getDir(getApplicationContext());  
    try { 
     File fileDir = new File(root.getAbsolutePath()+"/fun/"); 
     fileDir.mkdirs(); 

     File file = new File(fileDir, "itisfun.txt"); 
     FileWriter filewriter = new FileWriter(file); 
     BufferedWriter out = new BufferedWriter(filewriter); 
     out.write("I m enjoying......dude"); 
     out.close(); 

    } catch(...) { 
    ... 
    } 
} 


public File getDir(Context context) { 

     if (android.os.Environment.getExternalStorageState().equals(
       android.os.Environment.MEDIA_MOUNTED)) 
      cacheDir = new File(
        android.os.Environment.getExternalStorageDirectory(), 
         DIRECTORY_NAME); 
     else 
      cacheDir = context.getCacheDir(); 
     return cacheDir; 
    } 

Nếu không có lưu trữ bên ngoài, nó về cơ bản sử dụng các điện thoại bộ nhớ cache nội bộ (không tốt cho các tập tin lớn)

Đọc this

+0

Tôi bị mất Boss, tôi có thể đặt mã này ở đâu cho tôi – zaamm

+0

ở đó bạn đã chỉnh sửa nó ... nhưng nó thực sự rất đáng yêu – Hades

-3
  1. Kiểm tra xem thư mục của bạn fun và file itisfun.txt tồn tại trên SDcard, nếu bạn muốn làm cho họ bởi chương trình, bạn có thêm quyền:
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    Quyền này cho phép ứng dụng để tạo ra tập tin hoặc thư mục, cho phép :
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> chỉ cho phép ứng dụng đọc và ghi tệp đã tồn tại.
  2. Đảm bảo rằng sự cho phép của bạn nằm ngoài thẻ <application>, thường trước thẻ.
0

Nếu bạn ở chế độ 4.4, hãy đọc tại đây: http://www.androidcentral.com/kitkat-sdcard-changes Về cơ bản bạn không còn có thể đọc và ghi ở bất cứ đâu trên ổ. Bạn chỉ có thể viết thư mục và thư mục cá nhân của mình mà bạn đã trở thành chủ sở hữu.