我正在使用Android应用程序,我需要在/app/src/main/assets/app.properties
的资源文件夹中阅读我的属性。
但是当我使用时:
Properties properties = new Properties();
try {
properties.load(new FileInputStream("app.properties"));
} catch (IOException e) {
...
}
inputStream似乎是null
。我想我必须准确filepath
或类似的东西才能访问我的属性文件。
我需要在此课程中使用我的属性:/app/src/main/java/mypackage/model/myclass.java
答案 0 :(得分:0)
您可以使用Android上下文加载属性文件,如下所示:
context.getAssets().open("app.properties");
例如在片段中:
try{
Properties properties = new Properties();
properties.load(this.getActivity().getAssets().open("app.properties"));
}catch(Exception e){
e.printStackTrace();
}
由于您似乎需要在无法访问上下文的类中,您可以使用对上下文的静态访问创建自己的应用程序类,然后在任何地方使用此上下文。
创建您的应用程序类:
public class MyApp extends Application {
private static MyApp instance;
public static MyApp getInstance() {
return instance;
}
public static Context getContext(){
return instance.getApplicationContext()
}
@Override
public void onCreate() {
instance = this;
super.onCreate();
}
}
将新创建的应用程序添加到清单中:
<application
android:name="com.example.yourapp.MyApp"
...
完成此操作后,您可以在XMLParser中加载属性:
try{
Properties properties = new Properties();
properties.load(MyApp.getContext().getAssets().open("app.properties"));
}catch(Exception e){
e.printStackTrace();
}
答案 1 :(得分:0)
尝试获取资产并阅读它:
AssetFileDescriptor fileDescriptor = assetManager.openFd(fileName);
FileInputStream stream = fileDescriptor.createInputStream();
Properties properties = new Properties();
try {
properties.load(stream);
} catch (IOException e) {
...
}
答案 2 :(得分:0)
在/ app / src / test / java / mypackage / XMLParserTest中的单元测试“XMLParserTest”中我试过:
InputStream is = null;
Properties prop = null;
try {
prop = new Properties();
is = new FileInputStream(new File("C:/...fullpath.../app/src/main/assets/app.properties"));
prop.load(is);
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
它可以工作但是当我把它放在我的XMLParser类中时,我的inputStream“是”为null。 就像类无法访问文件.properties一样。它只适用于测试......
答案 3 :(得分:0)