Cocos2dx在安卓平台下获取到assets目录下文件的绝对路径

需求:curl需要支持https,需要手动设置ca地址用于验证,对于安卓平台,需要将这个ca证书文件放到本地,然后获取到绝对路径


经过很多的尝试,无论是放在res还是assets下,都没能获取到绝对路径

解决方案:虽然不能获取绝对路径,但是能读取到内容,就创建一个新的文件并拷贝内容,然后使用新建的文件路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**
 * android 获取uri的正确文件路径的办法
 * @param fileName assets下的文件名
 * @return absolutePath copy文件到可写目录,并返回绝对路径
 *
 * 有时会从其他的文件浏览器获取路径,这时根据路径去数据库取文件时会发现不成功,
 * 原因是由于android的文件浏览器太多,各自返回的路径不统一,
 * 而android本身的数据库中的路径是绝对路径,即"/mnt"开头的路径。
 */
private String copyAssetAndWrite(String fileName){
    try {
        File cacheDir=getCacheDir();
        if (!cacheDir.exists()){
            cacheDir.mkdirs();
        }
        File outFile =new File(cacheDir,fileName);
        if (!outFile.exists()){
            boolean res=outFile.createNewFile();
            if (!res){
                return null;
            }
        } else {
            if (outFile.length()>10){//表示已经写入一次
                return outFile.getPath();
            }
        }
        InputStream is=getAssets().open(fileName);
        FileOutputStream fos = new FileOutputStream(outFile);
        byte[] buffer = new byte[1024];
        int byteCount;
        while ((byteCount = is.read(buffer)) != -1) {
            fos.write(buffer, 0, byteCount);
        }
        fos.flush();
        is.close();
        fos.close();
        return outFile.getPath();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

  

posted @   wl小胖  阅读(905)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示