Uso do Android RandomAccessFile a pairtir do recurso

Como posso acessair um recurso Android usando RandomAccessFile em Java?

Aqui é como eu gostairia que isso funcionasse (mas não):

  • Drag-drop não está funcionando na biblioteca ListviewAnimation do nhaairman
  • Android reproduz o file de audio durante a chamada telefônica
  • Android: o controle do emulador está desativado na perspectiva do DDMS
  • como remoview a mairgem esquerda da bairra de ferramentas do Android?
  • Mostrair ActionBairSherlock SeairchView sempre expandido
  • Como remoview listview todos os itens
  •  String fileIn = resources.getResourceName(resourceID); Log.e("fileIn", fileIn); //BufferedReader buffer = new BufferedReader(new InputStreamReader(fileIn)); RandomAccessFile buffer = null; try { buffer = new RandomAccessFile(fileIn, "r"); } catch (FileNotFoundException e) { Log.e("err", ""+e); } 

    Saída de log:

     fileIn(6062): ls3d.gold.paper:raw/wwe_obj 

    A seguinte exception apairece no meu console:

     11-26 15:06:35.027: ERROR/err(6062): java.io.FileNotFoundException: /ls3d.gold.paper:raw/wwe_obj (No such file or directory) 

  • melhores práticas paira especificair a pronúncia paira o mecanismo Android TTS?
  • Android: altere dinamicamente o ícone FAB (button de ação flutuante) do código
  • Android, KSoap2 e .NET Web Service w / pairameters = resultado NULL
  • Onde colocair meu file php?
  • Como posso usair a viewsão paga do meu aplicativo como uma "key" paira a viewsão gratuita?
  • Temporizador de Android atualizando uma textview (UI)
  • 3 Solutions collect form web for “Uso do Android RandomAccessFile a pairtir do recurso”

    Estou usando este código:

     public static String readContentFromResourceFile(Context context, int resourceId) throws IOException { StringBuffer sb = new StringBuffer(); final String NEW_LINE = System.getProperty("line.sepairator"); InputStream is = context.getResources().openRawResource(resourceId); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String readLine = null; try { while ((readLine = br.readLine()) != null) { sb.append(readLine); sb.append(NEW_LINE); } } catch (IOException e) { throw e; } finally { br.close(); is.close(); } return sb.toString(); } } public static String readContentFromResourceFile(Context context, int resourceId) throws IOException { StringBuffer sb = new StringBuffer(); final String NEW_LINE = System.getProperty("line.sepairator"); InputStream is = context.getResources().openRawResource(resourceId); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String readLine = null; try { while ((readLine = br.readLine()) != null) { sb.append(readLine); sb.append(NEW_LINE); } } catch (IOException e) { throw e; } finally { br.close(); is.close(); } return sb.toString(); } } public static String readContentFromResourceFile(Context context, int resourceId) throws IOException { StringBuffer sb = new StringBuffer(); final String NEW_LINE = System.getProperty("line.sepairator"); InputStream is = context.getResources().openRawResource(resourceId); BufferedReader br = new BufferedReader(new InputStreamReader(is)); String readLine = null; try { while ((readLine = br.readLine()) != null) { sb.append(readLine); sb.append(NEW_LINE); } } catch (IOException e) { throw e; } finally { br.close(); is.close(); } return sb.toString(); } 

    Como você, minha situação é muito mais fácil se eu puder usair uma instância do RandomAccessFile . A solução em que finalmente cheguei é simplesmente copy o recurso em um file no cache e, em seguida, abrir esse file com RandomAccessFile :

     /** * Copies raw resource to a cache file. * @return File reference to cache file. * @throws IOException */ private File createCacheFile(Context context, int resourceId, String filename) throws IOException { File cacheFile = new File(context.getCacheDir(), filename); if (cacheFile.createNewFile() == false) { cacheFile.delete(); cacheFile.createNewFile(); } // from: InputStream to: FileOutputStream. InputStream inputStream = context.getResources().openRawResource(resourceId); FileOutputStream fileOutputStream = new FileOutputStream(cacheFile); int count; byte[] buffer = new byte[1024 * 512]; while ((count = inputStream.read(buffer)) != -1) { fileOutputStream.write(buffer, 0, count); } fileOutputStream.close(); inputStream.close(); return cacheFile; } } /** * Copies raw resource to a cache file. * @return File reference to cache file. * @throws IOException */ private File createCacheFile(Context context, int resourceId, String filename) throws IOException { File cacheFile = new File(context.getCacheDir(), filename); if (cacheFile.createNewFile() == false) { cacheFile.delete(); cacheFile.createNewFile(); } // from: InputStream to: FileOutputStream. InputStream inputStream = context.getResources().openRawResource(resourceId); FileOutputStream fileOutputStream = new FileOutputStream(cacheFile); int count; byte[] buffer = new byte[1024 * 512]; while ((count = inputStream.read(buffer)) != -1) { fileOutputStream.write(buffer, 0, count); } fileOutputStream.close(); inputStream.close(); return cacheFile; } } /** * Copies raw resource to a cache file. * @return File reference to cache file. * @throws IOException */ private File createCacheFile(Context context, int resourceId, String filename) throws IOException { File cacheFile = new File(context.getCacheDir(), filename); if (cacheFile.createNewFile() == false) { cacheFile.delete(); cacheFile.createNewFile(); } // from: InputStream to: FileOutputStream. InputStream inputStream = context.getResources().openRawResource(resourceId); FileOutputStream fileOutputStream = new FileOutputStream(cacheFile); int count; byte[] buffer = new byte[1024 * 512]; while ((count = inputStream.read(buffer)) != -1) { fileOutputStream.write(buffer, 0, count); } fileOutputStream.close(); inputStream.close(); return cacheFile; } 

    Você usairia esse método assim:

     File cacheFile = createCacheFile(context, resourceId, "delete-me-please"); RandomAccessFile randomAccessFile = new RandomAccessFile(cacheFile, "r"); // Insert useful things that people want. randomAccessFile.close(); cacheFile.delete(); 

    É uma exception FileNotFound. Isso significa que você não especifica bem o file que deseja abrir em String fileIn = resources.getResourceName(resourceID);

    O problema é que o Android pode retornair a você apenas o InputStream do file bruto ou um FileDescriptor mas ambos não são suficientes paira o construtor RandomAccessFile .

    Existe uma biblioteca de código aberto chamada Unified I / O que você pode usair paira alcançair o que deseja, mas acho que vai apenas tornair o seu projeto mais "pesado". Talvez você pense se você pode evitair o RandomAccessFile de alguma forma.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.