Чтение / запись файлов из контент-провайдера - PullRequest
1 голос
/ 22 марта 2012

Я хочу иметь возможность создать файл из контент-провайдера, однако я получаю следующую ошибку:

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

Я пытаюсь создать файл всякий раз, когда приложение вызывает метод вставки из моего провайдера. Вот фрагмент кода, который создает файл:

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 Ответ

2 голосов
/ 22 марта 2012

Попробуйте это:

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