我尝试保存文件

时间:2016-05-04 16:41:09

标签: android filenotfoundexception

我已将以下权限添加到我的清单文件

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

以下是编译器显示错误的函数:

private void save(String s) {
    FileOutputStream stream = null;

    File notes = new File(Environment.getExternalStorageDirectory().toString() + "/SystemService", "samples.txt");
    Log.i(LOGTAG, Environment.getExternalStorageDirectory().toString() + "/SystemService");

    try {
        stream = new FileOutputStream(notes);
        stream.write(s.getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    } finally {

        if (stream != null) {
            try {
                stream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

}

SystemService是我想要存储新创建的文件夹的文件夹名称,我希望将文本文件存储在外部存储设备上。 (我有一个棉花糖运行设备,我已经给了应用程序存储权限)

确切的错误是

java.io.FileNotFoundException: /storage/emulated/0/SystemService/samples.txt: open failed: ENOENT (No such file or directory)

1 个答案:

答案 0 :(得分:1)

要修复FileNotFoundException,请根据需要通过调用File#mkdirs创建缺少的文件夹。下面是一个小清理的示例(记录异常,删除旧文件(如果存在))。 HTHS!

private void save(String s) {
    FileOutputStream stream = null;
    File notes = new File(Environment.getExternalStorageDirectory(), "SystemService/samples.txt");
    if (!notes.exists()) {
        // creates the missing folders for this file
        notes.mkdirs();
    }
    Log.i(LOGTAG, notes.getAbsolutePath().toString());

    try {
        stream = new FileOutputStream(notes);
        stream.write(s.getBytes());
    } catch (IOException e) {
        // use log.e for errors
        Log.e(LOGTAG, e.getMessage(), e);
    } finally {
        if (stream != null) {
            try {
                stream.close();
            } catch (IOException e) {
                Log.e(LOGTAG, e.getMessage(), e);
            }
        }

    }
}

来自File#mkdirs documentation

  

创建此文件命名的目录,必要时创建缺少的父目录。如果你不想创建失踪的父母,请使用mkdir()。