Как открыть файл из директории assets

320
25 сентября 2017, 01:33

Хочу передать файл sound.mp3 на сервер. Есть метод из библиотеки, который принимает на вход аргумент класса File. Пробую так:

File soundFile = new File("//android_asset/sound.mp3");
bool isExists = soundFile.exists();

Не работает - переменная isExists = false.

Answer 1

Судя по en-SO напрямую сделать это невозможно, т.к. файлы в ассетах не хранятся как файлы.

Вам надо делать иначе:

  1. Получить InputStream из файла в ассетах так:
AssetManager am = context.getAssets();
InputStream is = am.open("test.mp3");
  1. Записать этот поток в новый файл в файловой системе (вот метод, принимающий объект типа файл (в нём укажите путь к файлу и пишущий в него то, что в InputStream)) так:
public static void writeBytesToFile(InputStream is, File file) throws IOException{
    FileOutputStream fos = null;
    try {   
        byte[] data = new byte[2048];
        int nbread = 0;
        fos = new FileOutputStream(file);
        while((nbread=is.read(data))>-1){
            fos.write(data,0,nbread);               
        }
    }
    catch (Exception ex) {
        logger.error("Exception",ex);
    }
    finally{
        if (fos!=null){
            fos.close();
        }
    }
}
READ ALSO
Чем отличается колбэк от слушателя?

Чем отличается колбэк от слушателя?

Например, чтобы обработать нажатие на Button необходимо воспользоваться методом setOnClickListener передав оному OnClickListener (слушатель)И такой Listener много...

240
JAVA - Можно ли создать exe файл?

JAVA - Можно ли создать exe файл?

Можно ли создать exe файл в JAVA? И можно ли будет его запрограммировать?

250
Передать переменную в PHP

Передать переменную в PHP

Здравствуйте имеется такой скрипт, как передать значения отсюда

289
Как обновить div через AJAX

Как обновить div через AJAX

На сайте есть блок с контентом который приходит средствам API с другого сервераИ чтобы увидеть изминение этого контента постоянно нужно обновлять...

243