Nano Hash - криптовалюты, майнинг, программирование

JUnit: копирование zip-файла из res в файловую систему Android

У меня есть zip-файл, созданный моим приложением для Android на планшете, который я также использую для тестов позже. Я могу открыть его на планшете Android, а также на моем ПК, т.е. он не поврежден. Я добавил этот ZIP-файл в папку /res/raw моего тестового проекта Android. Теперь я хотел бы скопировать этот файл для одного из моих тестовых наборов junit на устройство Android. Для этого я использую следующий код:

    boolean success = false;
    File appDirectory = MainActivity.getContext().getExternalFilesDir(null);
    File pictureSketch = new File(appDirectory, sketchName+".zip");
    if (!appDirectory.exists()) {
        assertTrue("App directory could not be created.",appDirectory.mkdirs());    
    }

    InputStream in = activity.getResources().openRawResource(raw.pictest);
    FileOutputStream out = new FileOutputStream(pictureSketch);
    byte[] buff = new byte[1024];
    int read = 0;

    try {
       while ((read = in.read(buff)) > 0) {
          out.write(buff, 0, read);
       }
    } finally {
         in.close();

         out.close();
         success = true;
    }       

    return success;

Zip-файл с правильным файлом создается, но при открытии выдает сообщение об ошибке: неверный zip-файл. Что я должен изменить, чтобы иметь возможность открывать zip-файл после передачи?

10.09.2013

Ответы:


1

Я не выяснил, что мой код делал неправильно, но нашел обходной путь, который служит той же цели:

Результат:

private void copyPicSketch() {  
    AssetManager assetManager = getInstrumentation().getContext().getResources().getAssets();
    String[] files = null;
    try {
        files = assetManager.list("");
    } catch (IOException e) {
        Log.e("tag", "Failed to get asset file list.", e);
    }
    for(String filename : files) {
        if (filename.contains(sketchName)) {
            InputStream in = null;
            OutputStream out = null;
            try {
              in = assetManager.open(filename);
              File outFile = new File(activity.getExternalFilesDir(null), filename);
              out = new FileOutputStream(outFile);
              copyFile(in, out);
              in.close();
              in = null;
              out.flush();
              out.close();
              out = null;
            } catch(IOException e) {
                Log.e("tag", "Failed to copy asset file: " + filename, e);
            }               
        }
    }
}
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);
    }
}
10.09.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..