2017-02-20 12 views
1

У меня есть a jar, который находится в папке /libs в моем проекте андроида. В банке есть xml-файлы.чтение файла с .apk

Что я хочу сделать, так это прочитать файл xml из банку в моем приложении для Android.

Я попытался использовать метод ниже:

 private String loadFromJar(String p_strFileName) { 
      try { 
       String strPath = p_strFileName; 
       InputStream stream = this.class.getResourceAsStream(strPath); 
       if (stream == null) { 
        System.err.println(" stream is null for " + strPath); 
       } else { 
        int av = (stream.available()/200) + 1; 
        int i = 0; 
        StringBuilder sb = new StringBuilder(); 
        while (i <= av) { 
         try { 
          byte[] a = new byte[200]; 
          stream.read(a); 
          sb.append(new String(a, "UTF-8")); 
          i++; 
         } catch (Exception e) { 
          break; 
         } 
        } 
        return sb.toString(); 
       } 
      } catch (Exception e) { 
       Log.e(LOG_TAG, "jarfile is null for " + p_strFileName); 
      } 
      return ""; 
     } 

Однако, это не работает.

Я также попытался сделать то же самое в приложении java swing И это работает.

Я думаю APK поведение файла отличается от файла JAR

Я знаю, что я могу прочитать файл из папки Реза или в папке с активами. Однако это не решение для моего дела. Потому что банка является платформо-независимой библиотекой. И я хочу использовать библиотеку для получения файлов так же, как и на других платформах, таких как настольные платформы.

+0

Почему бы вам не использовать активы !? просто поместите ваш xml в активы –

+0

Так как у моей библиотеки уже есть файлы. Почему я должен помещать их вручную в приложение для Android? – ziLk

ответ

-1

Я попытался несколько способов прочитать файл из jar в проекте Android.

Наконец я могу прочитать файл с помощью этого:

InputStream stream = getClass().getClassLoader().getResourceAsStream(strPath); 

Приведенные ниже коды не делает никакой работы.

InputStream stream = MyFragment.class.getResourceAsStream(strPath); // fails 
InputStream stream = getClass().getResourceAsStream(p_strFilePath); // fails