2013-07-10 3 views
0

Вот код, я использую (во многих ответах):Android - Копирование базы данных из активов

InputStream myInput; 
     try { 
      myInput = iNezamApplication.getAppContext().getAssets().open(DB_NAME); 
      String outFileName = DB_PATH + DB_NAME; 

      OutputStream myOutput = new FileOutputStream(outFileName); 
      byte[] buffer = new byte[1024]; 
      int length; 
      while ((length = myInput.read(buffer))>0){ 
       myOutput.write(buffer, 0, length); 
      } 

      myOutput.flush(); 
      myOutput.close(); 
      myInput.close(); 

     } catch (IOException e1) { 
      e1.printStackTrace(); 

     } 

Однако, я всегда получаю исключение после достижения OutpoutStream линии:

java.io.FileNotFoundException: /data/data/package_name/databases/databasename.db: open failed: ENOENT (No such file or directory) 
+3

Пожалуйста, рассмотреть возможность перехода на испытанной, отлажена и поддерживается 'SQLiteAssetHelper', а не в возрасте , unsupported cod e "найден во многих ответах": https://github.com/jgilfelt/android-sqlite-asset-helper – CommonsWare

+0

Спасибо, я знаю об этом, но я не хочу его использовать. Мне просто нужен ответ на мой вопрос. –

ответ

6

Я пытался что-то вроде этого ..

final String[] sample_dbName = {"DrugsNew.db"}; 

    int assetDbSize = sample_dbName.length; 
    File databaseFile = new File("/data/data/com.handyrep2.ui/databases"); 

    // check if databases folder exists, if not create one and its subfolders 
    if (!databaseFile.exists()){ 
     databaseFile.mkdir(); 
    } 

     for(int i=0;i<assetDbSize;i++){ 
      String outFilename =null; 

     outFilename = "/data/data/com.handyrep2.ui/databases"+ "/" + sample_dbName[i]; 

      File sampleFile = new File(outFilename); 

       try { 
        InputStream in = activity.getAssets().open("offlinedb/"+sample_dbName[i]); 

        OutputStream out = new FileOutputStream(outFilename); 
        // Transfer bytes from the sample input file to the sample output file 
        byte[] buf = new byte[1024]; 
        int len; 
        while ((len = in.read(buf)) > 0) { 
         out.write(buf, 0, len); 
        } 
        out.flush(); 
        // Close the streams 
        out.close(); 
        in.close(); 
       }catch(IOException e) { 

       } 


     } 
+0

Сначала нужно создать каталог баз данных. Спасибо :) –

1

Является ли «package_name» заменой вашего реального имени пакета, просто чтобы опубликовать его здесь или действительно использовать это в вашем DB_PATH? :)

+0

Нет, это реальное имя пакета, я просто опустил его здесь :) –

+0

OK. Я понятия не имею. Мы используем почти тот же подход в нашем текущем проекте, который работает отлично, поэтому я пока не вижу никаких ошибок. Извините :( – a11n

1

вы должны создать объект File на первый

+0

Не работает. –

Смежные вопросы