Подтвердить что ты не робот

Как создать файл на внутреннем хранилище Android?

Я хочу сохранить файл во внутреннем хранилище в определенную папку. Мой код:

File mediaDir = new File("media");
if (!mediaDir.exists()){
   mediaDir.createNewFile();
   mediaDir.mkdir();

}
File f = new File(getLocalPath());
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
fos.write(data);
fos.close();

getLocalPath возвращает /data/data/myPackage/files/media/qmhUZU.jpg, но когда я хочу создать медиа-папку, я получаю исключение "java.io.IOException: файловая система только для чтения". Любые идеи о том, как писать файлы на внутренней памяти телефона в папке? Спасибо.

4b9b3361

Ответ 1

Вы должны использовать ContextWrapper следующим образом:

ContextWrapper cw = new ContextWrapper(context);
File directory = cw.getDir("media", Context.MODE_PRIVATE);

Как всегда, обратитесь к документации, ContextWrapper может многое предложить.

Ответ 2

Вам нужно создать директорию media, добавленную к тому, что возвращает getLocalPath().

Ответ 3

Я получал такую ​​же точную ошибку. Вот исправление. Когда вы указываете, где писать, Android автоматически разрешит ваш путь в /data/ или /mnt/sdcard/. Позвольте мне объяснить.

Если вы выполните следующий оператор:

File resolveMe = new File("/data/myPackage/files/media/qmhUZU.jpg");
resolveMe.createNewFile();

Он разрешит путь к корню /data/ где-то выше в Android.

Я понял это, потому что после того, как я выполнил следующий код, он был автоматически помещен в корневой каталог /mnt/ без моего перевода что-либо самостоятельно.

File resolveMeSDCard = new File("/sdcard/myPackage/files/media/qmhUZU.jpg");
resolveMeSDCard.createNewFile();

Быстрое исправление будет заключаться в изменении вашего следующего кода:

File f = new File(getLocalPath().replace("/data/data/", "/"));

Надеюсь, что это поможет

Ответ 4

Привет, попробуйте, он создаст в нем каталог + файл

File mediaDir = new File("/sdcard/download/media");
if (!mediaDir.exists()){
    mediaDir.mkdir();
}

File resolveMeSDCard = new File("/sdcard/download/media/hello_file.txt");
resolveMeSDCard.createNewFile();
FileOutputStream fos = new FileOutputStream(resolveMeSDCard);
fos.write(string.getBytes());
fos.close();

System.out.println("Your file has been written");