【已解决】Android Studio 加载自定义properties文件出错java.lang.ExceptionInInitializerError Caused by: java.lang.Nu
2023-09-27 14:26:51 时间
Android Studio 在加载自定义properties配置文件时出错:
java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
定位到出错的地方,源头是Properties类 对象的load()方法,该方法需要一个InputStream的参数
Properties p = new Properties();
...
p.load(is);
文件是放在包根目录的,assets试过,项目根目录也试过,java根目录也试过,src根目录也试过
网上百度试过以下方法:
//视频中方法
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("com/example/app/db.properties");
//百度方法1:通过当前类加载器的getResourceAsStream方法获取
InputStream is = DBUtils.class.getClassLoader().getResourceAsStream("com/example/app/db.properties");
//百度方法2:从文件方式获取
InputStream is = null;
try {
is = new FileInputStream(new File("com/example/app/db.properties"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//百度方法3:通过类加载器获取
InputStream is = ClassLoader.getSystemResourceAsStream("com/example/app/db.properties");
//百度方法4:通过url获取
InputStream is = null;
try {
java.net.URL url = new URL("com/example/app/db.properties");
is = url.openStream();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
其他方法
InputStream is = context.getAssets().open("com/example/app/db.properties");
InputStream is = getResources().openRawResource(R.raw.app);
InputStream is = DBUtils.class.getResourceAsStream("com/example/app/db.properties");
最后想到需要InputStream类型的对象,传入它的子类应该也是可以的吧,
然后用绝对路径传入:
InputStream is = new FileInputStream("C:\\Users\\Admin\\Desktop\\db.properties");
结果成了!
绝对路径太费劲,想换相对路径,使用
System.out.println(System.getProperty("user.dir"));
输出当前项目所在文件夹路径
C:\Users\Admin\AndroidStudioProjects\App
原来如此!
接下来替换成相对路径:
InputStream is = new FileInputStream(".\\app\\src\\main\\java\\com\\example\\app\\db.properties");
Over!
PS:
直接使用InputStream的方式没有成功,不知道问题出现在哪里,望路过大佬不吝赐教!
相关文章
- android 集成支付宝app支付(原生态)-包括android前端与java后台
- 使用Jquery Mobile设计Android通讯录
- Java(Android)线程池
- Android开发热门前沿知识,深度好文
- android AsyncTask实例
- Android解决button反复点击问题
- Android Studio编译OsmAnd出现警告:GeoPointParserUtil.java使用或覆盖了已过时的 API。有关详细信息请使用-Xlint:deprecation重新编译
- Android Studio中创建java项目
- 主题:Android、iPhone和Java三个平台一致的加密工具
- java_线程的开启与结束(可用于android)
- Android OAuth认证
- Android 自己的自动化测试(2)依据ID查找对象(java)
- Android ROM 制作教程
- [干货]2017已来,最全面试总结——这些Android面试题你一定需要
- Android屏幕投影及反向控制原理
- Android Jetpack Kotlin/Java pageing3的基础使用。
- Cannot lock Java compile cache (H:projectandroidhkkaikebakaikebakaikeba.gradle6.7.1javaCom
- 【52】Kotlin android java 工程转换成kt工程
- Android系统CPU使用率获取(附java代码)%25
- 【11】【2】Android GreenDao核心类
- Android 学习笔记(11)—— ListView 实现活动跳转
- 【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )
- Android QQ登录验证的小例子
- 为 Android 添加 Java 层服务
- Android 功耗(6)---整机功耗测试
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( 图片质量压缩方法 | 查找 Java 源码中的 native 方法对应的 C++ 源码 )
- 在Ubuntu上为Android系统内置Java应用程序测试Application Frameworks层的硬件服务