2012-03-21 15 views
1

から私は、しかし、私は次のエラーを取得する、コンテンツプロバイダからファイルを作成することができるようにしたい:読み取り/書き込みファイルのコンテンツプロバイダ

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

私がやろうとしていますどのような時はいつでもファイルを作成していますアプリケーションはプロバイダからinsertメソッドを呼び出します。これは、ファイルの作成を行うコードの抜粋です。

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

は、もともと私はopenFileOutputを(使用していた)が、関数が未定義ているように見えます。

誰でもこの問題の回避策がありますか?

EDIT:私はディレクトリも指定する必要があることを知りました。ここでは、コードのより完全なスニペットは次のとおりです。

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

答えて

2

はこれを試してみてください:

私も許可

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

私が言ってエラーを得た。この時間を有効に

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();  

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(); 
} 
+0

私のコードは自動的にミスインを作成しないようですgディレクトリ。私のパッケージディレクトリには、 "Files"というフォルダはありません。だから私はパスを "/data/data/Project.Package.Structure/"に短縮したのです。 私はあなたの解決策を見て、あなたも同じ問題に取り組んだ。 – drum

関連する問題