簡體   English   中英

android:寫入sdcard失敗-為什么?

[英]android: writing to sdcard fails - why?

我的代碼有問題,應該將一些數據字符串寫入我的sdcard。 我使用一個類來做到這一點:

public class CVS {
    private String path;
    private String filename;

    private File dir;
    private File file;

    private FileWriter fw;

    public CVS() {
        path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/traffic/";
        filename = "data.cvs";
        file = new File(path, filename);    
        createDir();
    }

    private void createDir() {
        dir = new File(path);   
        if(!dir.exists()) {
            if(file.mkdirs() == false) {
                Log.d(Config.LOGTAG, "UHOH!!!!!!!!!!!!!!!!!!!!!!!!");
            }
        }
        else Log.d(Config.LOGTAG, "dir exists");
    }

    public void writeToFile(String data) {
        try {
            fw = new FileWriter(file);  
            fw.append(data); Log.d(Config.LOGTAG, "data saved to file...");
        }
        catch(Exception e) {
            Log.d(Config.LOGTAG, "file: " + e.getMessage());
        }
    }
}

這總是導致異常被writeToFile()捕獲,並說“權限被拒絕”。 實際上,我在清單中將權限設置為WRITE_EXTERNAL_STORAGE。 所以-我在做什么錯!!

附加信息:安裝了SD卡的真實設備。 沒有模擬器。 Android 2.2。 如果我自己創建目錄,問題將不會消失:(

要么:

  • 您的清單錯誤,或者
  • 您的外部存儲已安裝在開發計算機上,或者
  • 您手動連接目錄錯誤

您的代碼還可以,但是仍然可以添加是否插入sdcard的檢查,如果運行此代碼並且未插入sdcard,則會拋出異常,良好的作法是您應該始終捕獲異常。 您可以通過以下代碼檢查sdcard ...

if (android.os.Environment.getExternalStorageState().equals
                (android.os.Environment.MEDIA_MOUNTED))
 {
     //code or logic if sd card is inserted....
 }
 else
 {
     Log.e("Exception","SD Card not found!");
 }

所有答案都是必需的,但如果是三星設備,則需要在路徑后附加“ / external_sd /”,因為他們認為自己需要三思而后行並破壞API:

http://developer.samsung.com/forum/board/thread/view.do?boardName=GeneralB&messageId=162934&messageNumber=1381&startId=zzzzz~&searchType=TITLE&searchText=sdcard

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM