在Android中将资产或原始或资源文件读取为File对象

我有一个jar文件,我需要通过文件对象。 如何将资源或资产作为文件对象传递给该方法?

如何将项目文件夹中的资源或原始文件转换为文件对象?

Solutions Collecting From Web of "在Android中将资产或原始或资源文件读取为File对象"

这是我做的:

将您的资产文件复制到SD卡中:

AssetManager assetManager = context.getResources().getAssets(); String[] files = null; try { files = assetManager.list("ringtone"); //ringtone is folder name } catch (Exception e) { Log.e(LOG_TAG, "ERROR: " + e.toString()); } for (int i = 0; i < files.length; i++) { InputStream in = null; OutputStream out = null; try { in = assetManager.open("ringtone/" + files[i]); out = new FileOutputStream(basepath + "/ringtone/" + files[i]); byte[] buffer = new byte[65536 * 2]; int read; while ((read = in.read(buffer)) != -1) { out.write(buffer, 0, read); } in.close(); in = null; out.flush(); out.close(); out = null; Log.d(LOG_TAG, "Ringtone File Copied in SD Card"); } catch (Exception e) { Log.e(LOG_TAG, "ERROR: " + e.toString()); } } 

然后通过以下path读取文件:

 File ringFile = new File(Environment.getExternalStorageDirectory().toString() + "/ringtone", "fileName.mp3"); 

你走了 你有你的资产文件的文件对象的副本。 希望这可以帮助。

将原始文件读入文件

  InputStream ins = getResources().openRawResource(R.raw.my_db_file); ByteArrayOutputStream outputStream=new ByteArrayOutputStream(); int size = 0; // Read the entire resource into a local byte buffer. byte[] buffer = new byte[1024]; while((size=ins.read(buffer,0,1024))>=0){ outputStream.write(buffer,0,size); } ins.close(); buffer=outputStream.toByteArray(); FileOutputStream fos = new FileOutputStream("mycopy.db"); fos.write(buffer); fos.close(); 

要避免OutOfMemory应用以下逻辑。

不要创build一个包含所有数据的大型ByteBuffer。 创build一个小得多的ByteBuffer,填充数据,然后将这些数据写入FileChannel。 然后重置ByteBuffer并继续,直到写入所有数据。

我不知道有什么办法可以得到一个实际的File对象,但是如果你可以使用一个FileDescriptor ,你可以这样做:

 FileDescriptor fd = getAssets().openFd(assetFileName).getFileDescriptor();