android:写入SD卡失败 - 为什么?

时间:2011-03-31 11:10:32

标签: android file sd-card

我的代码有问题,应该将一些数据字符串写入我的SD卡。我用一个班来做这个:

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()中捕获一个exeption,说“权限被拒绝”。实际上,我在清单中设置了WRITE_EXTERNAL_STORAGE的权限。所以 - 我做错了什么!?

其他信息:安装了SD卡的真实设备。没有模拟器。 android 2.2。如果我自己创建了这个目录,问题就不会消失:(

3 个答案:

答案 0 :(得分:2)

或者:

  • 你的清单错了,或者
  • 您的外部存储空间已安装在您的开发计算机上,或
  • 您的目录的手动连接错误

答案 1 :(得分:1)

你的代码还可以但是你仍然可以添加一个是否插入sdcard的检查,如果你运行这个代码并且没有插入sdcard那么它会抛出一个异常,好的做法就是你应该总是抓住exptions。 您可以通过以下代码检查SD卡...

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!");
 }

答案 2 :(得分:0)

需要所有答案,但如果它是三星设备,则需要附加" / external_sd /"走到路上 - 因为他们认为他们需要用我们的思想愚弄并打破API:

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