Как создать файл на Android Internal Storage? - PullRequest
26 голосов
/ 16 февраля 2011

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

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

Ответы [ 5 ]

23 голосов
/ 16 февраля 2011

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

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

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

2 голосов
/ 10 августа 2011

Я получаю точно такую ​​же ошибку.Вот исправление.Когда вы указываете, куда писать, 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/", "/"));

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

2 голосов
/ 16 февраля 2011

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

0 голосов
/ 19 марта 2018

Запись файла

При сохранении файла во внутреннем хранилище вы можете получить соответствующий каталог в виде файла, вызвав один из двух методов:

getFilesDir ()

      Returns a File representing an internal directory for your app.

getCacheDir ()

     Returns a File representing an internal directory for your 
     app's temporary cache files.
     Be sure to delete each file once it is no longer needed and implement a reasonable 
     size limit for the amount of memory you use at any given time, such as 1MB.

Внимание: если в системе недостаточно памяти, она может удалить файлы кэшабез предупреждения.

0 голосов
/ 20 апреля 2012

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

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");  
...