9
A
回答
5
这里是我做过什么:
复制你的资产文件到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());
}
}
的路径然后阅读您的文件:
File ringFile = new File(Environment.getExternalStorageDirectory().toString() + "/ringtone", "fileName.mp3");
你去那里。你有你的资产文件的文件对象的副本。希望这可以帮助。
0
我不知道有什么方法可以得到一个实际File
对象,但如果你能有一个FileDescriptor
工作,你可以这样做:
FileDescriptor fd = getAssets().openFd(assetFileName).getFileDescriptor();
+2
我不知道这可以用什么方式。你能解释一下这个描述符的用法吗? – Pavandroid
4
读取原始文件到文件。
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();
为了避免内存不足应用以下逻辑。
不要创建一个包含所有数据的巨大ByteBuffer。创建一个小得多的ByteBuffer,填充数据,然后将这些数据写入FileChannel。然后重置ByteBuffer并继续,直到写入所有数据。
相关问题
- 1. Android原始资源文件中的RandomAccessFile
- 2. 从Android资产目录中获取File对象或URI对象
- 3. Android - 作为InputStream的原始资源
- 4. 如何随机读取Android中的原始资源文件
- 5. Android的原始资源
- 6. 作为资源读取文本文件
- 7. 原始资源Android文件路径
- 8. 尝试读取原始资源文件的异常[Android]
- 9. 从Android的原始资源获取Xml
- 10. 从libGDX资源获取android资源ID或URL
- 11. 图片资源或矢量资源
- 12. 检查资源类型是否为静态资源或文档资源
- 13. Android:Howto获取Android资源的资源ID
- 14. Android阅读文本原始资源文件
- 15. 将原始资源设置为铃声
- 16. Android混合原始声音。源是java数组而不是文件或资源
- 17. '无效的对象或资源'与bind_param
- 18. 无效的对象或资源mysqli_stmt
- 19. 与bind_param,无效的对象或资源
- 20. 开放资产或原始文件为文件
- 21. 原始资源文件类型
- 22. 从资源中读取文本文件
- 23. Android资源 - 对象数组
- 24. xml资源或sqlite
- 25. 的Android测试原始资源
- 26. 资源内置Android资源中的$ NotFoundException?
- 27. eclipse错误地将包解释为“资源”或源文件夹
- 28. Android获取资源文件夹以显示资源类型
- 29. Android开发 - 使用变量打开原始或资产文件
- 30. Symony2资产 - 应用/资源
如果我喜欢这个,我会在应用程序中感受到内存不足。 – Pavandroid
这是为我工作。我省略了一些部分。在此代码之前,请使用文件对象的mkdirs()方法创建文件夹。你可以谷歌它。 – drulabs
您正在为@ vipul's和我的解决方案解决内存异常......您可以粘贴logcat条目。有些事情是不对的。你在设备或模拟器上测试? – drulabs