繁体   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