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

android:写入SD卡失败-为什么?,android,file,sd-card,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.getExternalSt

我的代码有一个问题,该代码应该向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,表示“权限被拒绝”。实际上,我设置了在清单中写入外部存储的权限。那么-我做错了什么

附加信息:安装了sd卡的真实设备。没有模拟器。安卓2.2。如果我自己创建目录,问题不会消失:(

或者:

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

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

您的代码正常,但仍然可以添加检查SD卡是否插入,如果您运行此代码但SD卡未插入,则它将引发异常,良好做法是您应该始终捕获例外。 您可以通过以下代码检查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!");
 }

您的代码正常,但仍然可以添加检查SD卡是否插入,如果您运行此代码但SD卡未插入,则它将抛出异常,良好的做法是您应该始终捕获这些异常。 您可以通过以下代码检查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!");
 }

所有的答案都是必须的,但如果是三星设备,那么你需要在路径中附加“/external_sd/”——因为他们决定需要改变我们的思维,打破API:


所有答案都是必需的,但如果是三星设备,那么你需要在路径中附加“/external\u sd/”——因为他们决定需要用我们的思维来改变API:


此代码很好,因此您应该显示清单。如果您使用模拟器尝试此操作,会发生什么情况?此代码很好,因此您应该显示清单。如果您使用模拟器尝试此操作,会发生什么情况?