java.io.FileNotFoundException:/mnt/sdcard/Android/data/com.example.imymemine/files/qwer/abcd.txt(是一个目录)

时间:2014-02-06 13:58:53

标签: java android sdk

我遇到了这个问题,我试图将标题(作为文件夹名称)和内容(日记条目)的日记条目保存到外部存储。

已将<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />添加到我的清单文件中,并为我的模拟器创建了10MiB。

然而,它给我带来了问题。有什么想法吗?

public void SavingData(){ 
    String Title = txtTitle.getText().toString();
    String Content = txtContent.getText().toString();

    boolean isWriteable = false;
    boolean isAvailable = false;
    String state = Environment.getExternalStorageState();

        if (Environment.MEDIA_MOUNTED.equals(state)) {
        //we can RW the media;
            isWriteable = isAvailable = true;
        }

    else if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        isAvailable = true;
        isWriteable = false;
        }else{

        isAvailable = isWriteable = false;

            }

    File sdcard = new File (getExternalFilesDir("MyDiary"), Title);
    File dir = new File(sdcard + "/" + Content +".txt");

    dir.mkdirs();
    try {
        dir.createNewFile();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
        e1.printStackTrace();
        }
    if(!dir.mkdirs()){
        Log.e(LOG_TAG,"Directory not created");
        }
    try {
        FileOutputStream fos = new FileOutputStream(dir);
        fos = openFileOutput("MyDiary",Context.MODE_APPEND);

        fos.write(Content.getBytes());
            fos.close();
        } catch (IOException e) {
        e.printStackTrace();
}
}

1 个答案:

答案 0 :(得分:2)

您正在将.txt文件创建为目录。

之后的所有内容
dir.mkdirs();
你应该

sdcard.mkdirs();
try {
    FileOutputStream fos = new FileOutputStream(dir);
    fos = openFileOutput("MyDiary",Context.MODE_APPEND);

    fos.write(Content.getBytes());

    fos.close();
} catch (IOException e) {
    e.printStackTrace();
}

此外,而不是

File dir = new File(sdcard + "/" + Content +".txt");

你想要使用

File dir = new File( sdcard, Content + ".txt" );

避免显式使用路径分隔符。如果您必须使用它,请使用File.pathSeparatorChar