我希望能够从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)
答案 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();
}