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

10

我有一个需要传递文件对象的jar文件。如何将资源或资产以文件对象的形式传递给该方法?

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

2个回答

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");

完成了。您现在拥有了资产文件的文件对象副本。希望这对您有所帮助。


如果我这样做,我的应用程序会出现内存不足的问题。 - Pavandroid
这对我起作用。我省略了一部分。在运行此代码前,请使用文件对象的mkdirs()方法创建文件夹。你可以通过谷歌搜索来学习如何操作。 - drulabs
你们的解决方案都出现了内存异常... 你能贴一下logcat日志吗?似乎有些不对劲。你在真机上还是模拟器上测试啊? - drulabs

0

我不知道有什么方法可以获取实际的File对象,但如果您可以使用FileDescriptor进行操作,您可以这样做:

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

2
我不知道这个描述符可以用在什么地方。你能解释一下它的用法吗? - Pavandroid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接