从内容提供商读取/写入文件

时间:2012-03-21 22:14:12

标签: android file android-contentprovider

我希望能够从Content Provider创建文件,但是我收到以下错误:

java.io.Filenotfoundexception: /0: open file failed: erofs (read-only file system)

我想要做的是每当应用程序从我的Provider调用insert方法时创建一个文件。这是创建文件的代码的摘录:

FileWriter fstream = new FileWriter(valueKey);
BufferedWriter out = new BufferedWriter(fstream); 
out.write(valueContent);
out.close();

最初我想使用openFileOutput()但该函数似乎未定义。

任何人都有解决此问题的方法吗?

编辑:我发现我还必须指定目录。这是一个更完整的代码片段:

File file = new File("/data/data/Project.Package.Structure/files/"+valueKey);
file.createNewFile();
FileWriter fstream = new FileWriter(file);
BufferedWriter out = new BufferedWriter(fstream);
out.write(valueContent);
out.close();    

我也启用了权限

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

这次我得到一个错误说:

java.io.IOException: open failed: ENOENT (No such file or directory)

1 个答案:

答案 0 :(得分:2)

试试这个:

File parentDirectory = new File("/data/data/Project.Package.Structure/files");
if(!parentDirectory.exists())
{
    System.err.println("It seems like parent directory does not exist...");
    if(!parentDirectory.mkdirs())
    {
         System.err.println("And we cannot create it...");
         // we have to return, throw or something else
    }
}

File file = new File(parentDirectory, String.valueOf(valueKey));
file.createNewFile();

BufferedWriter out = new BufferedWriter(new FileWriter(file));
try
{
    out.write(valueContent);
    System.err.println("Now it works!");
}
catch(IOException e)
{
    e.printStackTrace();
}
// Anyway don't forget to close streams
finally
{
     out.close();   
}
相关问题