代码之家  ›  专栏  ›  技术社区  ›  Diaz diaz

如何读取app文件夹下的配置文件

  •  1
  • Diaz diaz  · 技术社区  · 6 年前

    我有一个配置文件 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();
        }
    

    我在使用同一个文件 平地 而且效果很好。如下所示。

     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"
    }
    

    平地 部分运行良好,我可以分配属性。但是我需要在Java类中读取相同的文件。我该走哪条路 File

    配置文件如下:

    VERSION_NAME=1.0.0
    VERSION_CODE=1
    APPLICATION_ID=com.app.drecula
    BASE_URL=https://reqres.in/
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Sagar    6 年前

    理想情况下,您应该将特定于应用程序的文件放在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')))
    
        2
  •  1
  •   deadfish    6 年前

    好吧,让我们回到基础上来。首先在中创建属性 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 .