Как создать файл на внутреннем хранилище 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: файловая система только для чтения". Любые идеи о том, как писать файлы на внутренней памяти телефона в папке? Спасибо.
Ответы
Ответ 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");