Android开发 创建与获取Assets目录

这篇博客介绍了在Android开发中如何创建Assets目录并读取JSON文件的两种方法:一种是通过全局Application获取Assets路径,另一种是通过Context获取。详细步骤包括使用filer.createResource()创建Assets目录,然后利用AssetManager读取JSON文件内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、创建 Assets 目录

先创建一个文件,位于编译后的 class 文件目录。然后再把该文件的绝对路径做截取,便能得到项目在电脑上的绝对路径(每个项目在电脑上路径都不一样)。再拼接上 src/main/assets 便能实现 Assets目录JSON文件的创建了。

StandardLocation.CLASS_OUTPUT:java 文件生成 class 文件的位置,/app/build/intermediates/javac/debug/classes/ 目录下

private final static String OUTPUT_FILE_NAME = "destination.json";
 //获取路径:app/src/main/assets
try {
	//filer.createResource()意思是创建源文件
	//StandardLocation.CLASS_OUTPUT:
	//java文件生成class文件的位置,/app/build/intermediates/javac/debug/classes/目录下
    FileObject resource = filer.createResource(StandardLocation.CLASS_OUTPUT, "", OUTPUT_FILE_NAME);
    String resourcePath = resource.toUri().getPath();
    String appPath = resourcePath.substring(0, resourcePath.indexOf("app") + 4);
    //...xxx/app/ + src/main/assets
    String assetsPath = appPath + "src/main/assets";
    File file = new File(assetsPath);
    if (!file.exists()) {
        file.mkdirs();
    }
} catch (IOException e) {
    e.printStackTrace();
}

二、获取 Assets 目录

方法一:通过全局 Application 获取

获取全局 Application

//ActivityThread 主进程的一个入口有 currentApplication 方法返回 Application
public static Application getApplication() {
	Application sApplication;
    if (sApplication == null) {
        try {
        	//通过反射调用 ActivityThread.currentApplication();
            Method method = Class.forName("android.app.ActivityThread").getDeclaredMethod("currentApplication");
            sApplication = (Application) method.invoke(null, (Object) null);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }
    return sApplication;
}

获取 Assets 路径下的文件并读取 JSON 文件

private  static String parseFile(String fileName) {
    AssetManager assets = AppGlobals.getApplication().getResources().getAssets();

    InputStream stream = null;
    BufferedReader reader = null;
    StringBuilder builder = new StringBuilder();
    try {
        stream = assets.open(fileName);
        reader = new BufferedReader(new InputStreamReader(stream));
        String line = null;
        while ((line = reader.readLine()) != null) {
            builder.append(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (stream != null) {
                stream.close();
            }
            if (reader != null) {
                reader.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return builder.toString();
}
方法二:通过 Context 获取

获取路径读取 JSON 文件

//读取assets文件夹中的json文件,返回json字符串
public static String getJson(String fileName, Context context) {
    //将json数据变成字符串
    StringBuilder stringBuilder = new StringBuilder();
    BufferedReader bf = null;
    try {
        //获取assets资源管理器
        AssetManager assetManager = context.getAssets();
        //通过管理器打开文件并读取
        BufferedReader bf = new BufferedReader(new InputStreamReader(
                assetManager.open(fileName)));
        String line;
        while ((line = bf.readLine()) != null) {
            stringBuilder.append(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (bf != null) {
                bf.close();} catch (IOException e) {
            e.printStackTrace();
        }
    }
    return stringBuilder.toString();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值