Java 如何在android studio项目中加载.properties文件数据
在我当前的应用程序中,我需要维护一个Java 如何在android studio项目中加载.properties文件数据,java,android,Java,Android,在我当前的应用程序中,我需要维护一个config.properties文件,并从这个属性文件中获取java文件中的数据。我已将属性文件和访问这些属性文件的ConfigUtil.java放在同一位置。但当我运行应用程序时,它会给出FileNotFoundException 我无法理解为什么当属性文件和属性文件都在同一个文件夹中时,不加载属性文件 我的ConfigUtils.java代码是: public class ConfigUtil { private Properties properti
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
您应该指定文件的完整路径(因为根工作目录不是
ConfigUtil
所在的目录):
或者使用以下内容(使用从中加载的目录ConfigUtil
):
步骤1 在assets文件夹中创建.properties文件,如果没有assets文件夹,请在main下创建一个 配置属性
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);
}
}
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();
}
}
}
步骤3
通过调用Util.getProperty(,getApplicationContext())在属性文件中使用变量
MainActivity.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);
}
}
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();
}
}
}
请从这里下载完整的代码您可以发布相应的代码吗?从下面的链接获取完整的简短示例程序。我使用了这两个选项,但我没有得到结果。我还尝试通过ApplicationContext.getDir()方法获取路径,它将路径返回为/data/data/package-name@anand如果是
Android
,只需将其放入res\raw
文件夹,稍后您可以通过调用getResources().openrawsource(R.raw.file)获得InputStream
代码>好答案…:)-资产文件夹是从这个答案中获得的绝佳洞察力。非常感谢。这可以工作,但会使config.properties
中的数据易受攻击。如果你反编译你的.apk,你会发现里面的每个参数都是纯文本。仅当此内容不保密时才应使用。