【问题标题】:How to load .properties file data in android studio project如何在android studio项目中加载.properties文件数据
【发布时间】:2014-08-25 10:20:26
【问题描述】:

在我当前的应用程序中,我需要维护一个config.properties 文件,并且我需要从这个属性文件中获取我的java 文件中的数据。我已将属性文件和访问这些属性文件的ConfigUtil.java 放置在同一位置。但是当我运行应用程序时,它会给出FileNotFoundException

当两者都在同一个文件夹中时,我无法理解为什么不加载属性文件。

我的 ConfigUtils.java 代码是:

public class ConfigUtil {

private Properties properties;
InputStream inputStream = null;

public Properties getUrl(){
    properties = new Properties();
    try {
        inputStream = new FileInputStream("config.properties");
        properties.load(inputStream);

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }finally {
        if(inputStream != null){
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return properties;
}
}

和 config.properties 文件也在同一个文件夹中 config.properties 的位置是:

/app/src/main/java/config.properties

ConfigUtil.java 的位置是:

/app/src/main/java.configutils.java

【问题讨论】:

标签: java android


【解决方案1】:

第 1 步

在assets文件夹中创建一个.properties文件,如果你没有assets文件夹,请在main下创建一个

config.properties

name=User Name
age=User Age
ok=Click

第 2 步

创建一个 Util.java 文件来读取属性文件。

Util.java

package javaant.com.propertiesfile;

import android.content.Context;
import android.content.res.AssetManager;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * Created by Nirmal Dhara on 12-07-2015.
 */
public class Util {
    public static String getProperty(String key,Context context) throws IOException {
        Properties properties = new Properties();;
        AssetManager assetManager = context.getAssets();
        InputStream inputStream = assetManager.open("config.properties");
        properties.load(inputStream);
        return properties.getProperty(key);

    }
}

第三步

通过调用 Util.getProperty(,getApplicationContext()) 来使用属性文件中的变量。

MainActivity.java

package javaant.com.propertiesfile;

import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;

import java.io.IOException;


public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // read value from properties file

        TextView txtname= (TextView) findViewById(R.id.txtname);
        TextView txtage= (TextView) findViewById(R.id.txtage);
        Button btnok= (Button) findViewById(R.id.btnok);

        try {
            txtname.setText(Util.getProperty("name",getApplicationContext()));
            txtage.setText(Util.getProperty("age",getApplicationContext()));
            btnok.setText(Util.getProperty("ok",getApplicationContext()));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

请从这里下载完整代码http://javaant.com/how-to-use-properties-file-in-android/#.VwzippN96Hs

【讨论】:

  • 不错的答案... :)-
  • 资产文件夹是这个答案的重要见解。谢谢!
  • 这可行,但会使config.properties 中的数据易受攻击。如果你反编译你的 .apk,你会发现里面的每个参数都是纯文本。仅当此内容未保密时才应使用。
【解决方案2】:

您应该指定文件的完整路径(因为根工作目录不是ConfigUtil 所在的目录):

inputStream = new FileInputStream("src/main/java/config.properties");

或使用以下内容(使用目录 ConfigUtil 加载自):

inputStream = getClass().getResourceAsStream("config.properties");

【讨论】:

  • 我使用了这两个选项,但我没有得到结果。我还尝试通过 ApplicationContext.getDir() 方法获取路径,并将路径返回为 /data/data/package-name
  • @anand 如果是Android,只需将其放入res\raw 文件夹,稍后您可以通过调用getResources().openRawResource(R.raw.file); 获得InputStream
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多