如何加载属性文件夹中的属性文件?

时间:2016-04-13 09:18:47

标签: java android

我正在使用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

4 个答案:

答案 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)