如何阅读app文件夹

时间:2018-06-07 05:52:06

标签: android gradle android-file

我在app文件夹中有一个配置文件config.properties。我在build.gradle中用于构建配置。 我需要在java代码中读取此文件。但我可以弄清楚我应该使用的path。我怎样才能在java代码中读取此文件。下面的代码给了我FileNotFoundException

 try {
        Properties properties = new Properties();
        File inputStream=new File("/config.properties");
        properties.load(new FileInputStream(inputStream));
        return properties.getProperty("BASE_URL");
    }catch (IOException e){
        e.printStackTrace();
    }

我在build.gradle中使用相同的文件并且运行良好。如下。

 defaultConfig {
    Properties versionProps = new Properties()
    versionProps.load(new FileInputStream(file('config.properties')))
    def properties_versionCode = versionProps['VERSION_CODE'].toInteger()
    def properties_versionName = versionProps['VERSION_NAME']
    def properties_appid= versionProps['APPLICATION_ID']


    applicationId properties_appid
    minSdkVersion 14
    targetSdkVersion 26
    versionCode properties_versionCode
    versionName properties_versionName
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

build.gradle部分工作正常,我可以分配属性。但我需要在java类中读取相同的文件。我应该为File使用什么路径。

配置文件如下:

VERSION_NAME=1.0.0
VERSION_CODE=1
APPLICATION_ID=com.app.drecula
BASE_URL=https://reqres.in/

2 个答案:

答案 0 :(得分:1)

理想情况下,您应将特定于应用程序的文件放在assets文件夹下,并将gradle构建配置和特定于应用程序的配置分开。在assets/configs文件夹下添加特定于应用程序的配置属性文件。然后你可以按如下方式阅读:

  final Properties properties = new Properties();
  final AssetManager assetManager = getAssets();
  final InputStream inputStream= assetManager.open("configs/config.properties");
  properties.load(inputStream);

如果您仍想继续,那么唯一的办法就是将文件放在assets文件夹中,并放在build.gradle使用

versionProps.load(new FileInputStream(file('/src/main/assets/config/config.properties')))

答案 1 :(得分:1)

好的,让我们回到基础。首先,您在build.gradle中创建属性,然后使用自定义字段创建buildConfigField

productFlavors {
    play {
        dimension "MyDimension"

        Properties versionProps = new Properties()
        versionProps.load(new FileInputStream(file('config.properties')))
        def properties_versionCode = versionProps['VERSION_CODE'].toInteger()
        def properties_versionName = versionProps['VERSION_NAME']

        //...

        buildConfigField "int", "MY_VERSION_CODE", "$properties_versionCode"
        buildConfigField "String", "MY_VERSION_NAME", "\"$properties_versionName\""

    }
}

重建项目后,字段将能够从BuildConfig.{FIELD}进行调用。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //...

    Log.d(TAG, "Version Name: " + BuildConfig.MY_VERSION_NAME);
    Log.d(TAG, "Version Code: " + BuildConfig.MY_VERSION_CODE);

    //...
}

更多信息here