8

SDCard にファイルを書き込もうとしていますが、logcat でエラーが発生します:

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)

そして、ここで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(...) {
    ...
}

マニフェスト:

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

5 に答える 5

9

SDカードに書き込むには、マニフェストファイルで許可を与える必要があります

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
于 2013-01-23T09:11:43.343 に答える
4

@Ramが言及している許可を持っていること、およびSDカードがマウントされていることを確認する必要があります。次の方法でマウントされているかどうかを確認できます:-

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

マウントされていないカードは適切に処理する必要がありますが、一般的な落とし穴は、スマートフォンがUSBケーブルで接続されている場合、デスクトップOS経由でマウントされている可能性があることです。つまり、Androidではマウントされていません。

ありがとう、

ライアン

于 2013-01-23T09:27:46.993 に答える
0

これが私が使用するコードの一部です。

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;
    }

外部ストレージがない場合は、基本的に電話の内部キャッシュを使用します (大きなファイルには適していません)。

これを読む

于 2013-01-23T09:30:02.153 に答える
0

4.4 を使用している場合は、こちらをお読みください: http://www.androidcentral.com/kitkat-sdcard-changes 基本的に、ドライブのどこでも読み書きできなくなりました。プライベート ディレクトリと所有者になったディレクトリにのみ書き込むことができます。

于 2014-07-21T06:23:13.437 に答える