2015-01-10 4 views
0

Я пишу приложение для Android, и я использую библиотеку caffe. Моя проблема в том, что при запуске мне нужно инициализировать caffe, что делается путем передачи двух файлов (структуры сети) в caffe. Проблема в том, что я не знаю, как хранить дополнительные файлы на устройстве. Я добавил файл модели к активам, но я не знаю, как я могу его прочитать с помощью пути к файлу. Можете ли вы сказать, где хранить этот файл, доступ к которому можно получить, используя путь к файлу?Сохранение файла на Android для собственного чтения

Спасибо за любые идеи.

ответ

0

Активы упакованы и доступны только с использованием специальных методов, поэтому я решил проблему с помощью файла доступа, а затем скопировал его в новое место, которое я передал на родном методе.

2

Это должно быть сделано. Просто скопируйте эти файлы в каталог данных из папки с данными. Если у вас уже есть эти файлы, просто загрузите их.

String toPath = "/data/data/" + getPackageName(); // Your application path 




private static boolean copyAssetFolder(AssetManager assetManager, 
      String fromAssetPath, String toPath) { 
     try { 
      String[] files = assetManager.list(fromAssetPath); 
      new File(toPath).mkdirs(); 
      boolean res = true; 
      for (String file : files) 
       if (file.contains(".")) 
        res &= copyAsset(assetManager, 
          fromAssetPath + "/" + file, 
          toPath + "/" + file); 
       else 
        res &= copyAssetFolder(assetManager, 
          fromAssetPath + "/" + file, 
          toPath + "/" + file); 
      return res; 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return false; 
     } 
    } 

private static boolean copyAsset(AssetManager assetManager, 
     String fromAssetPath, String toPath) { 
    InputStream in = null; 
    OutputStream out = null; 
    try { 
     in = assetManager.open(fromAssetPath); 
     new File(toPath).createNewFile(); 
     out = new FileOutputStream(toPath); 
     copyFile(in, out); 
     in.close(); 
     in = null; 
     out.flush(); 
     out.close(); 
     out = null; 
     return true; 
    } catch(Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
} 

private static 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); 
    } 
} 
0

Поместите их в проект в качестве активов, а затем при запуске приложения, вы можете прочитать их активы и скопировать их в приватную зону хранения приложений. Вы можете найти этот каталог, используя Context.getFilesDir().

Оттуда вы сможете передать файлы в Caffe.