Properties的使用

Properties的各种相对路径,绝对路径的用法

所在包:

package com.test.javaAPI.collections;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.Iterator;
import java.util.Properties;
import java.util.Random;
import java.util.ServiceConfigurationError;
import java.util.ServiceLoader;

import org.junit.Test;

import sun.util.spi.XmlPropertiesProvider;

/**
 * 见:尚学堂131课, Hashtable,和HashMap的使用类似,区别 一 Hashtable与HashMap的区别(面试题) 1
 * Hashtable线程安全,同步,效率相对低下 HashMap线程不安全,非同步,效率相对高 2
 * 父类不同,Hashtable的父类是Dictionary,HashMap的父类是Abstractmap 3
 * null:Hashtable的键和值不能为null HashMap键最多一个是null,值可以多个null
 * 这里着重使用Properties,主要用于读取资源配置文件
 *
 * @author Wei
 * @time 2016年10月1日 下午6:48:34
 */
public class ProprtiesTest {
	public static void main(String[] args) throws FileNotFoundException, IOException {
		Properties prop = new Properties();
		prop.setProperty("name", "weiyongle22");
		prop.setProperty("sex", "male");
		System.out.println(prop.getProperty("name"));
		int r = new Random().nextInt(100);
		String fileName = "wyl" + r + ".properties";
		String xmlName = "wyl" + r + ".xml";
		// 把properties写入到指定的文件中
		prop.store(new FileOutputStream(new File("C:/Users/Wei/Desktop/" + fileName)), "i am 评论");
		// 把properties读取到xml中 绝对路径
		// prop.storeToXML(new FileOutputStream(new File("C:/Users/Wei/Desktop/"
		// + xmlName)), "我是注释啊", "UTF-8");
		// 相对路径 以当前工程为根路径
		prop.storeToXML(new FileOutputStream(new File("src/yonle.xml")), "我是注释啊,哈哈哈", "UTF-8");
		// XmlPropertiesProvider p = loadProvider();
		// p.store(prop, new FileOutputStream(new
		// File("C:/Users/Wei/Desktop"+"wyl.xxx")), "", "UTF-8");
		prop.store(new FileOutputStream(new File("src/wyl.properties")), "我是注释,不知道你能不能看到我");

	}

	/**
	 * 测试从new File(String path)相对路径读取文件
	 *
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	@Test
	public void testLoad() throws FileNotFoundException, IOException {
		Properties p = new Properties();
		// 也是相对路径,不过这个相对路径是以项目名为相对路径的,即代表都是在MyTag这个工程下
		p.load(new FileInputStream(new File("src/yonle.xml")));
		p.load(new FileInputStream(new File("src/wyl.properties")));
		System.out.println("" + p.getProperty("name"));

	}

	/**
	 * 重要 .class.getResourceAsStream("类相对路径"),例子:
	 * ProprtiesTest.class.getResourceAsStream(
	 * "/com/test/javaAPI/collections/wyl.properties") 使用类相对路径读取配置文件
	 *
	 * @throws IOException
	 */
	@Test
	public void testFromClass() throws IOException {
		Properties p = new Properties();
		// 这种情况用的比较多,以类相对路径获取配置文件,以 "/"为bin
		p.load(ProprtiesTest.class.getResourceAsStream("/com/test/javaAPI/collections/wyl.properties"));
		// 以 "" 为bin
		p.load(Thread.currentThread().getContextClassLoader()
				.getResourceAsStream("com/test/javaAPI/collections/wyl.properties"));
		String sex = p.getProperty("sex");
		System.out.println("sex:" + sex);
	}

	private static XmlPropertiesProvider loadProvider() {
		return AccessController.doPrivileged(new PrivilegedAction<XmlPropertiesProvider>() {
			public XmlPropertiesProvider run() {
				ClassLoader cl = ClassLoader.getSystemClassLoader();
				XmlPropertiesProvider provider = loadProviderFromProperty(cl);
				if (provider != null)
					return provider;
				provider = loadProviderAsService(cl);
				if (provider != null)
					return provider;
				return new jdk.internal.util.xml.BasicXmlPropertiesProvider();
			}
		});
	}

	private static XmlPropertiesProvider loadProviderAsService(ClassLoader cl) {
		Iterator<XmlPropertiesProvider> iterator = ServiceLoader.load(XmlPropertiesProvider.class, cl).iterator();
		return iterator.hasNext() ? iterator.next() : null;
	}

	private static XmlPropertiesProvider loadProviderFromProperty(ClassLoader cl) {
		String cn = System.getProperty("sun.util.spi.XmlPropertiesProvider");
		if (cn == null)
			return null;
		try {
			Class<?> c = Class.forName(cn, true, cl);
			return (XmlPropertiesProvider) c.newInstance();
		} catch (ClassNotFoundException | IllegalAccessException | InstantiationException x) {
			throw new ServiceConfigurationError(null, x);
		}
	}
}

  

时间: 2024-10-04 17:45:51

Properties的使用的相关文章

springboot的application.properties与.yml的区别

现在我们的application.properties文件内容是: [plain] view plain copy server.port=8090 server.session-timeout=30 server.context-path= server.tomcat.max-threads=0 server.tomcat.uri-encoding=UTF-8 spring.datasource.url = jdbc:mysql://localhost:3306/newbirds spring

Properties

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Map; import java.util.Map.Entry; import java.uti

Spring用代码来读取properties文件

我们都知道,Spring可以@Value的方式读取properties中的值,只需要在配置文件中配置org.springframework.beans.factory.config.PropertyPlaceholderConfigurer <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

给你的JAVA程序配置参数(Properties的使用)

我们在写JAVA程序时,很多时候运行程序的参数是需要动态改变的 测试时一系列参数,运行时一系列参数 又或者数据库地址也需要配一套参数,以方便今后的动态部署 这些变量的初始化,我们在写小DEMO时完全可以写死在JAVA文件中 但程序需要发布或者局部部署时,这些参数就需要脱离程序代码了 我们有多种存放参数的方式,比如数据库.XML文件又或者直接是txt文件 现在介绍一种使用JAVA,简单方便的参数读取方式 .properties文件,我们并不陌生,很多优秀的框架中就能看到它的存在,比如Hiberna

java 通过 Properties 读取数据库配置 .properties 文件的使用。

system.properties user=root password=root jdbcUrl=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8; driverClass=com.mysql.jdbc.Driver 调用方法: public void getProperties(){ Properties prop = new Properties(); try { prop.load(new B

properties文件路径的读取

System.out.println(System.getProperty("user.dir"));  //这个是去工程的绝对路径的  System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));//这个是去当前classpath的uri的!  new Properties().load(new FileInputStream("test.prope

spring 读取properties的两种方法

一:直接使用context命名空间 如: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:websocket="http

Eclipse的properties插件

分享一个不错的编写properties文件的Eclipse插件(plugin),有了它咱们在修改一些简体中文.繁体中文等 Unicode文本时,就不用再运用native2ascii编码了.您能够经过Eclipse中的软件晋级(Software Update)装置此插件,过程如下: 1.打开Eclipse的Help菜单,将鼠标移到Software Update子项,在呈现的子菜单中点击Find and Install:2.在Install/Update对话框中挑选Search for new fe

JAVA使用和操作properties文件

java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properties文件中,可以用"#"来作注释,properties文件在Java编程中用到的地方很多,操作很方便.Properties 类存在于包 Java.util 中,该类继承自 Hashtable. 1. getProperty ( String  key) ,   用指定的键在此属性列表中搜索

五种方式让你在java中读取properties文件内容不再是难题

一.背景 最近,在项目开发的过程中,遇到需要在properties文件中定义一些自定义的变量,以供java程序动态的读取,修改变量,不再需要修改代码的问题.就借此机会把Spring+SpringMVC+Mybatis整合开发的项目中通过java程序读取properties文件内容的方式进行了梳理和分析,先和大家共享. 二.项目环境介绍 Spring 4.2.6.RELEASE SpringMvc 4.2.6.RELEASE Mybatis 3.2.8 Maven 3.3.9 Jdk 1.7 Id