Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 231
#1

Копирование папки из Assets - Android

15.04.2015, 16:37. Просмотров 1187. Ответов 10
Метки нет (Все метки)

Всем здравствуйте! Я бы хотел узнать как можно скопировать подпапку (например "pictures") находящуюся в папке assets на карту памяти телефона. В подпапке "pictures" находятся несколько картинок.
Есть вариант как копировать один файл, но как целую папку я не знаю...
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 private void copyfile() {
            
            byte[] buffer = new byte[1024];
            OutputStream myOutput = null;
            int length;
         
            InputStream myInput = null;
            try {
                myInput = mycontext.getAssets().open(FILE_NAME);
                // Передаем данные из inputfile в outputfile
                myOutput = new FileOutputStream(FILE_PATH + FILE_NAME);
                while ((length = myInput.read(buffer)) > 0) {
                    myOutput.write(buffer, 0, length);
                }
                myOutput.close();
                myOutput.flush();
                myInput.close();
             
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
Добавлено через 1 час 55 минут
Помогите пожалуйста!..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 835
15.04.2015, 16:50     Копирование папки из Assets #2
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
Есть вариант как копировать один файл, но как целую папку я не знаю...
ну если я не ошибаюсь(а если ошибаюсь поправьте), то даже когда копируешь папку в ОС, то копируются все файлы данное папки по отдельности...а Вы щас хотите взять и скопировать папку одним движением? да давно бы уже по одному файлику да скопировали бы
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 231
16.04.2015, 08:50  [ТС]     Копирование папки из Assets #3
ну рассчитывал может есть команда или процедура, файлов то много, не хотел сильно увеличивать код)

Добавлено через 15 часов 2 минуты
у меня постоянно выходит ошибка в этой строке
Java
1
 myInput = mycontext.getAssets().open(FILE_NAME);
, и вслед за ней куча других ошибок. Возможно такое что он не может открыть этот файл? Потому что я пытался скопировать файл данных, который ничем не открывается.
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 835
16.04.2015, 08:56     Копирование папки из Assets #4
SkN[i]lpl[e][r], так у Вас папка в assets или нет?
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
16.04.2015, 09:07     Копирование папки из Assets #5
А зачем файл открывать? Просто перебор и копирование.
Паблито
2063 / 1805 / 562
Регистрация: 12.05.2014
Сообщений: 6,430
Завершенные тесты: 1
16.04.2015, 09:11     Копирование папки из Assets #6
в гугле первая ссылка про копирование файлов из asserts
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 231
16.04.2015, 09:46  [ТС]     Копирование папки из Assets #7
androbro, да папка в assets находиться, в ней еще 2 подпапки в которых содержаться файлы
Rube, просто везде где я смотрел примеры команда getAssets().open() используется для копирования
Паблито, те примеры кодов не работают у меня, сверху как раз пример кода я скинул для копирования, и он не работает, ошибка в строке открытия файла
androbro
323 / 283 / 59
Регистрация: 17.10.2014
Сообщений: 835
16.04.2015, 10:36     Копирование папки из Assets #8
SkN[i]lpl[e][r],
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
да папка в assets находиться, в ней еще 2 подпапки в которых содержаться файлы
ну а почему открываешь так, как будто файл у тебя лежит в корне assets?
Цитата Сообщение от SkN[i]lpl[e][r] Посмотреть сообщение
myInput = mycontext.getAssets().open(FILE_NAME);
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
16.04.2015, 10:39     Копирование папки из Assets #9
Попробуйте вот так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
try {       
    AssetManager am = getAssets();  
    File destinationFile = new File(Environment.getExternalStorageDirectory()+ dir + fileName);  //путь
    InputStream in = am.open(fileName); // открываем файл
    FileOutputStream f = new FileOutputStream(destinationFile);  
    byte[] buffer = new byte[1024];
    int len1 = 0;
    while ((len1 = in.read(buffer)) > 0) {
        f.write(buffer, 0, len1);
    }
    f.close(); 
    resCopy=true; 
} catch (Exception e) {
    Log.d(LOG_TAG, e.getMessage()); 
    resCopy=false;
}
Мне кажется закавыка в путях у вас, выведите FILE_PATH и FILE_NAME в лог.
"/" не забыли?
Паблито
2063 / 1805 / 562
Регистрация: 12.05.2014
Сообщений: 6,430
Завершенные тесты: 1
16.04.2015, 11:02     Копирование папки из Assets #10
вот такой код у меня работает
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    private void copyFolder(String name) throws IOException {
        AssetManager assetManager = getAssets();
        String[] files = null;
        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
            try {
                files = assetManager.list(name);
            } catch (IOException e) {
                Log.i("===", "Failed to get asset file list.\n" + e);
            }
            for(String filename : files) {
                InputStream in = null;
                OutputStream out = null;
                File folder = new File(Environment.getExternalStorageDirectory() + "/" + name);
                boolean success = true;
                if (!folder.exists()) {
                    success = folder.mkdir();
                }
                if (success) {
                    try {
                        in = assetManager.open(name + "/" +filename);
                        out = new FileOutputStream(Environment.getExternalStorageDirectory() + "/"+ name + "/" + filename);
                        copyFile(in, out);
                    } catch(IOException e) {
                        Log.i("===", "Failed to copy asset file: " + filename + " " + e);
                    } finally {
                        in.close();
                        out.close();
                    }
                }
            }
        }
    }
 
    private void copyFile(InputStream in, OutputStream out) throws IOException {
        byte[] buffer = new byte[1024];
        int read;
        while((read = in.read(buffer)) != -1) {
            out.write(buffer, 0, read);
        }
    }
вызывается так
Java
1
2
3
4
5
6
7
8
9
10
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        try {
            copyFolder("lol");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
папка lol создана в assets, там положил пару файлов и они успешно скопировались на карту
в манифесте добавил на всякий пожарный
Код
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2015, 11:45     Копирование папки из Assets
Еще ссылки по теме:

Получить абсолютный путь к Assets файлам Android
Как локализовать папку assets? Android
Записать файл .wav в assets Android
Работа с файлом из папки Assets Android
как загрузить файл в папку assets Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
SkN[i]lpl[e][r]
3 / 3 / 0
Регистрация: 12.05.2011
Сообщений: 231
16.04.2015, 11:45  [ТС]     Копирование папки из Assets #11
Паблито, я проверил, папка создалась, но если необходимо скопировать эту папку и еще вложенные в нее папки то не копируется, только начальная папка. Наверное нужно каждую папку по отдельности копировать
Yandex
Объявления
16.04.2015, 11:45     Копирование папки из Assets
Ответ Создать тему
Опции темы

Текущее время: 05:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru