Android读取properties配置文件的实例详解
什么是properties配置文件
Properties配置文件是一种简单的键值对存储结构,通常用于存储应用程序的配置信息,其格式如下:
key1=value1
key2=value2
key3=value3
其中,"="前面的是键名,"="后面的是键值,两者之间使用"="进行分割,每行代表一个键值对,可以在一个Properties文件中同时包含多个键值对。
在Android中读取properties配置文件
在Android中,可以使用java.util.Properties
类来读取Properties配置文件。下面是实现读取Properties配置文件的基本步骤:
- 在
assets
目录下创建一个config.properties
文件,添加需要配置的键值对,如下所示:
server_ip=192.168.0.1
server_port=8080
- 创建一个读取Properties文件的工具类,如下所示:
public class PropertyUtils {
private static final String CONFIG_FILE = "config.properties";
public static Properties getProperties(Context context) {
Properties properties = new Properties();
try {
InputStream inputStream = context.getAssets().open(CONFIG_FILE);
properties.load(inputStream);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
}
- 在需要读取Properties文件的地方,调用
getProperties()
方法获取Properties对象,并根据键名获取对应的键值,如下所示:
Properties properties = PropertyUtils.getProperties(context);
String serverIp = properties.getProperty("server_ip");
int serverPort = Integer.parseInt(properties.getProperty("server_port"));
示例说明
示例一
假设我们正在开发一款社交软件,需要在不同的网络环境下连接到不同的服务器,在测试环境下我们需要连接测试服务器,而在正式环境下则需要连接正式服务器。同时,由于测试环境和正式环境的服务器彼此独立,因此它们的IP地址和端口号也会有所不同。
为了让应用程序具有灵活的配置性,我们可以将服务器的IP地址和端口号配置在一个Properties文件中,然后在应用程序中动态读取。具体操作如下:
- 在
assets
目录下创建一个config.properties
文件,添加测试环境和正式环境服务器的IP地址和端口号,如下所示:
#测试环境
test_server_ip=192.168.0.1
test_server_port=8080
#正式环境
prod_server_ip=192.168.0.2
prod_server_port=80
- 创建一个读取Properties文件的工具类,如下所示:
public class ServerConfigUtils {
private static final String CONFIG_FILE = "config.properties";
public static String getServerIp(Context context) {
Properties properties = getProperties(context);
if (isTestEnvironment()) {
return properties.getProperty("test_server_ip");
} else {
return properties.getProperty("prod_server_ip");
}
}
public static int getServerPort(Context context) {
Properties properties = getProperties(context);
if (isTestEnvironment()) {
return Integer.parseInt(properties.getProperty("test_server_port"));
} else {
return Integer.parseInt(properties.getProperty("prod_server_port"));
}
}
private static Properties getProperties(Context context) {
Properties properties = new Properties();
try {
InputStream inputStream = context.getAssets().open(CONFIG_FILE);
properties.load(inputStream);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
private static boolean isTestEnvironment() {
// TODO: 根据实际情况判断当前环境是否为测试环境
return true;
}
}
- 在需要连接服务器的地方,调用
getServerIp()
和getServerPort()
方法获取服务器的IP地址和端口号,并根据实际情况进行连接,如下所示:
String serverIp = ServerConfigUtils.getServerIp(context);
int serverPort = ServerConfigUtils.getServerPort(context);
if (isTestEnvironment()) {
// TODO: 连接测试服务器
} else {
// TODO: 连接正式服务器
}
示例二
假设我们正在开发一个存储密码的应用程序,用户可以在其中添加多个账号密码,然后在需要登录的时候可以选择对应的账号并显示对应的密码。为了确保安全性,我们需要将密码加密存储,并在读取的时候解密。同时,为了让用户在输入密码时能够方便地备份和恢复数据,我们需要将密码存储在一个Properties文件中,并且支持导出(备份)和导入(恢复)操作。
具体操作如下:
- 在
assets
目录下创建一个passwords.properties
文件,添加多个账号密码,如下所示:
account1=9DKeQ88/dM7bn73RmypqKA==
account2=BYzwXHlR2LKbnUg3NT6s/g==
account3=mIO4Tdvw1HYM+VOeC8miyA==
其中,键名为账号,键值为经过加密后的密码。
- 创建一个读取Properties文件的工具类,并添加加密和解密方法,如下所示:
public class PasswordUtils {
private static final String CONFIG_FILE = "passwords.properties";
public static Map<String, String> getPasswords(Context context) {
Properties properties = getProperties(context);
Map<String, String> passwords = new LinkedHashMap<>();
for (Object key : properties.keySet()) {
String password = decrypt(properties.getProperty((String) key));
passwords.put((String) key, password);
}
return passwords;
}
public static void setPassword(Context context, String account, String password) {
Properties properties = getProperties(context);
properties.setProperty(account, encrypt(password));
saveProperties(context, properties);
}
public static void exportPasswords(Context context, String fileName) {
Properties properties = getProperties(context);
try {
OutputStream outputStream = new FileOutputStream(new File(fileName));
properties.store(outputStream, null);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void importPasswords(Context context, String fileName) {
Properties properties = new Properties();
try {
InputStream inputStream = new FileInputStream(new File(fileName));
properties.load(inputStream);
inputStream.close();
saveProperties(context, properties);
} catch (IOException e) {
e.printStackTrace();
}
}
private static Properties getProperties(Context context) {
Properties properties = new Properties();
try {
InputStream inputStream = context.getAssets().open(CONFIG_FILE);
properties.load(inputStream);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return properties;
}
private static void saveProperties(Context context, Properties properties) {
try {
OutputStream outputStream = context.openFileOutput(CONFIG_FILE, Context.MODE_PRIVATE);
properties.store(outputStream, null);
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static String encrypt(String password) {
// TODO: 实现密码加密算法
return password;
}
private static String decrypt(String password) {
// TODO: 实现密码解密算法
return password;
}
}
- 在需要显示密码的页面,调用
getPasswords()
方法获取密码列表,并根据实际情况显示账号和密码,如下所示:
Map<String, String> passwords = PasswordUtils.getPasswords(context);
for (String account : passwords.keySet()) {
String password = passwords.get(account);
// TODO: 根据实际情况显示账号和密码
}
- 在需要添加账号密码的页面,调用
setPassword()
方法保存账号密码,如下所示:
PasswordUtils.setPassword(context, account, password);
- 在需要导出密码的页面,调用
exportPasswords()
方法将密码导出到指定的文件,如下所示:
String fileName = "/sdcard/passwords.properties";
PasswordUtils.exportPasswords(context, fileName);
- 在需要恢复密码的页面,调用
importPasswords()
方法将指定的文件中的密码导入到应用程序中,如下所示:
String fileName = "/sdcard/passwords.properties";
PasswordUtils.importPasswords(context, fileName);
以上就是几个使用Properties文件的示例,在实际开发中,我们可以根据具体需求使用各种方法来读取和使用Properties文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android读取properties配置文件的实例详解 - Python技术站