java Property

本文介绍了Java中Properties文件的基本操作方法,包括加载、存储、获取属性值等,并通过实例展示了如何封装Properties类来简化文件读写过程。此外,文章还定义了一个用于解析Properties文件的接口,便于后续代码复用。

 

Properties 继承于Hashtable

他可用流做参数 FileInputStream 和 FileOutputStream

常用方法:load、store、getProperty、setProperty

 

以下为实例代码:

 

package dirk.property;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Properties;
import java.util.Map.Entry;

/**
 * @author logichina
 *
 */
/**
 * @author logichina
 *
 */
public class ReadProperty {
	/*public static void main(String[] args)
	{
		Properties pps = System.getProperties();
		pps.list(System.out);
	}*/
	public static void main(String[] args)
	{
		Properties pps = new Properties();
		try
		{
			pps.load(new FileInputStream(System.getProperty("user.dir")+"/src/dirk.zhang.jsfdemo.properties"));
			//Enumeration<Object> enum1 = pps.propertyNames();
			
			Iterator<Entry<Object, Object>> ppsi = pps.entrySet().iterator();
			while(ppsi.hasNext())
			{
				Entry<Object,Object> e = ppsi.next();
				String strKey = (String)e.getKey();
				String strValue = (String)e.getValue();
				System.out.println(strKey+":"+strValue+"--");
			}
			pps.setProperty("new info","chenchen");
			pps.setProperty("dirk.team", "dallasForever");
			//writeProperty(System.getProperty("user.dir")+"/src/dirk.zhang.jsfdemo.properties","dirk.information","context","dirk.zhang modify");
			//writeProperty(System.getProperty("user.dir")+"/src/dirk.zhang.jsfdemo.properties","dirk.boss","still ku.ban","dirk.zhang modify");
			pps.store(new FileOutputStream(System.getProperty("user.dir")+"/src/test.out"), "new dirk information");
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}

 

以下是封装后的实例代码

 

package dirk.property;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Properties;
import java.util.Map.Entry;

/**
 * @author logichina
 *
 */
/**
 * @author logichina
 *
 */
public class ReadProperty {
	/*public static void main(String[] args)
	{
		Properties pps = System.getProperties();
		pps.list(System.out);
	}*/
	public static void main(String[] args)
	{
		Properties pps = new Properties();
		try
		{
			pps.load(new FileInputStream(System.getProperty("user.dir")+"/src/dirk.zhang.jsfdemo.properties"));
			//Enumeration<Object> enum1 = pps.propertyNames();
			
			Iterator<Entry<Object, Object>> ppsi = pps.entrySet().iterator();
			while(ppsi.hasNext())
			{
				Entry<Object,Object> e = ppsi.next();
				String strKey = (String)e.getKey();
				String strValue = (String)e.getValue();
				System.out.println(strKey+":"+strValue+"--");
			}
			pps.setProperty("new info","chenchen");
			pps.setProperty("dirk.team", "dallasForever");
			writeProperty(System.getProperty("user.dir")+"/src/dirk.zhang.jsfdemo.properties","dirk.information","context","dirk.zhang modify");
			writeProperty(System.getProperty("user.dir")+"/src/dirk.zhang.jsfdemo.properties","dirk.boss","still ku.ban","dirk.zhang modify");
			//pps.store(new FileOutputStream(System.getProperty("user.dir")+"/src/test.out"), "new dirk information");
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	
	public static void readPropertyToObj(String path,PropertyInfo infoObj) throws FileNotFoundException, IOException
	{
		Properties pps = new Properties();
		pps.load(new FileInputStream(path));
		/*封装对象*/
		infoObj.setInfo(pps);
	}
	
	public static Properties readPropertyToPps(String path) throws FileNotFoundException, IOException
	{
		Properties pps = new Properties();
		pps.load(new FileInputStream(path));
		return pps;
	}
	public static void writeProperty(String path,String name,String value,String note) throws FileNotFoundException, IOException
	{
		Properties pps = new Properties();
		pps.load(new FileInputStream(path));
		pps.setProperty(name, value);
		pps.store(new FileOutputStream(path), note);
	}
	
	
	
	/**
	 * property obj for dirk
	 * @author dirk.zhang
	 */
	class DirkObj implements PropertyInfo
	{
		public final String NAME="name";
		public final String NUM="num";
		public final String BOSS="boss";
		private String name="";
		private String num="";
		private String boss="";
		
		public String setInfo(Properties pps) {
			// TODO Auto-generated method stub
			if(pps==null)
				return "error no such property obj";
			name = pps.getProperty(NAME);
			num = pps.getProperty(NUM);
			boss = pps.getProperty(BOSS);
			boss = pps.getProperty("没有");
			return "";
		}
		
		public String getName() {
			return name;
		}


		public void setName(String name) {
			this.name = name;
		}


		public String getNum() {
			return num;
		}


		public void setNum(String num) {
			this.num = num;
		}


		public String getBoss() {
			return boss;
		}


		public void setBoss(String boss) {
			this.boss = boss;
		}
		
		@Override
		public String toString()
		{
			//System.out.println(this.name+":"+this.num+" "+this.boss);
			return this.name+":"+this.num+" "+this.boss;
		}
	}

}

 还定义一个文件和bean交互的接口

 

package dirk.property;

import java.util.Properties;


/**
 * property obj interface
 * @author dirk.zhang
 */
public interface PropertyInfo {
	String setInfo(Properties pps);
}
<think>好的,我现在需要回答用户关于Java中的property属性及其相关问题和解决方案的疑问。首先,我需要明确用户的问题范围,他们可能想了解property的基本概念、使用方法、常见问题以及解决方法。 首先,回顾Java中的property属性。PropertyJava中通常指的是通过getter和setter方法访问的类成员变量,遵循JavaBean的命名规范。此外,还有`java.util.Properties`类,用于处理配置文件,比如.properties文件。这两者都是用户可能提到的内容,需要区分清楚。 用户提到“property usage or issues”,可能涉及配置文件的读取、存储问题,或者属性在类中的封装和使用问题。另外,结合用户提供的引用内容,他们可能遇到了时间日期不正确的问题,比如在Docker容器中时区设置不正确导致的日志时间错误,这可能与系统属性或环境变量有关。 接下来,我需要组织回答的结构。首先解释property的基本概念,包括JavaBean属性和Properties文件的使用。然后,列举常见的问题,比如配置文件加载失败、编码问题、时区问题等,并提供相应的解决方案。同时,结合用户提供的引用,特别是引用[2]中的时间问题,需要详细说明如何通过设置时区系统属性来解决。 还需要注意用户提到的系统级指令,比如使用正确的中文回答,生成相关问题,正确使用LaTeX格式。例如,在提到系统属性时,使用$...$包裹代码,如`user.timezone`应写成`$user.timezone$`。同时,独立公式可能需要使用$$...$$,但这里可能不太涉及数学公式,所以重点放在代码和属性名称的正确格式上。 然后,检查是否有遗漏点。比如,Properties文件的安全性问题,比如敏感信息泄露,或者属性覆盖的问题。此外,Java 8之后的`java.util.Properties`是否有更新需要注意的地方?可能不需要,但可以提及使用try-with-resources来自动关闭流,提高代码健壮性。 生成的相关问题需要围绕property的不同方面,比如配置管理、时区问题、加密处理、国际化和与Spring集成等。确保问题覆盖用户可能进一步询问的方向。 最后,确保引用正确。用户提供的引用[^2]涉及到Docker中的时间问题,解决方案中提到设置时区,这可以通过Java系统属性`$user.timezone$`来实现,所以在回答中要引用这一点,并自然添加引用标识。 总结回答结构: 1. Java Property的定义和两种类型 2. 常见使用方式(JavaBean属性、Properties文件) 3. 常见问题及解决方案(包括时区问题引用) 4. 高级用法和安全性 5. 相关问题列表 确保每个部分简明扼要,符合用户要求的清晰结构,并引用相关部分。</think>### Java Property属性详解与常见问题解决 #### 一、Property属性的定义与类型 1. **JavaBean属性** 通过`getXxx()`和`setXxx()`方法操作的私有字段,例如: ```java public class User { private String name; // 字段 public String getName() { return name; } // getter public void setName(String name) { this.name = name; } // setter } ``` 这种属性遵循**封装原则**,用于控制对象状态的访问[^1]。 2. **配置文件属性** 使用`$java.util.Properties$`类管理键值对,常用于读取`.properties`文件: ```properties # app.properties db.url=jdbc:mysql://localhost:3306/test db.user=root ``` --- #### 二、Properties文件的使用方法 1. **加载与读取** ```java try (InputStream input = new FileInputStream("app.properties")) { Properties prop = new Properties(); prop.load(input); // 加载文件 String dbUrl = prop.getProperty("db.url"); // 读取值 } catch (IOException e) { e.printStackTrace(); } ``` 2. **动态修改属性** ```java prop.setProperty("db.user", "admin"); // 修改属性 prop.store(new FileOutputStream("app.properties"), "Updated user"); // 保存 ``` --- #### 三、常见问题与解决方案 1. **配置文件加载失败** - **原因**:文件路径错误或资源未打包到JAR中。 - **解决**:使用类加载器读取资源: ```java InputStream input = getClass().getClassLoader().getResourceAsStream("app.properties"); ``` 2. **中文乱码** - **原因**:`.properties`文件默认使用ISO-8859-1编码。 - **解决**:改用`$new InputStreamReader(input, StandardCharsets.UTF_8)$`读取。 3. **时区与时间错误** - **现象**:Docker容器中Java程序日志时间不正确。 - **解决**:启动时设置系统属性`$-Duser.timezone=GMT+08$`: ```bash java -Duser.timezone=Asia/Shanghai -jar app.jar ``` 4. **敏感信息泄露** - **建议**:避免明文存储密码,使用加密工具(如Jasypt)处理。 --- #### 四、高级用法 1. **系统属性与环境变量** - 获取系统属性:`$System.getProperty("user.dir")$` - 环境变量:`$System.getenv("PATH")$` 2. **动态配置热更新** 结合Apache Commons Configuration或Spring Cloud Config实现。 --- §§ 1. 如何通过环境变量覆盖Java Properties文件中的配置? 2. Properties文件如何实现国际化多语言支持? 3. 在Spring Boot中如何优雅地管理Properties配置? 4. 如何加密Properties文件中的敏感数据? 5. Docker容器中Java应用时区不一致的根本原因是什么? : JavaBean属性遵循封装原则,通过getter/setter控制访问。 : Docker容器时区问题可通过设置`$-Duser.timezone$`解决。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值