java通过虚拟机设置参数的方式动态获取当前项目的绝对路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java通过虚拟机设置参数的方式动态获取当前项目的绝对路径相关的知识,希望对你有一定的参考价值。

public final static String RUNTIME_HOME = System.getProperty("RUNTIME_HOME");
	
	protected volatile boolean reload = false;

	protected final String CONFIG_FILE;
	protected final Properties prop = new Properties();
	
	private static CBECConfigFile instance = new CBECConfigFile();
	
	public static CBECConfigFile getInstance(){
		return instance;
	}
	
	private CBECConfigFile(){
		this(RUNTIME_HOME + "/config/" + "cbec-config.properties");
	}
	
	protected CBECConfigFile(String configFile){
		CONFIG_FILE = configFile;
		this.init();
	}
	
	/**
	 * 加载配置文件到内存中
	 */
	private void init() {
		InputStream is = null;
		try {
			is = new FileInputStream(CONFIG_FILE);
			prop.load(is);
		} catch (IOException e) {
			logger.error("加载配置文件异常:[" + CONFIG_FILE + "], " + e.getMessage(), e);
		} finally {
			if(is != null){
				try {
					is.close();
				} catch (Exception e) {
				}
			}
		}
	}
	
	/**
	 * 得到配置文件中属性的值
	 * @param key
	 * @return
	 */
	public String getValue(String key) {
		if(reload){
			synchronized (prop) {
				if(reload){
					init();
					reload = false;
				}
			}
		}
		return prop.getProperty(key);
	}
	
	public String getValue(String key, String defaultValue) {
		if(reload){
			synchronized (prop) {
				if(reload){
					init();
					reload = false;
				}
			}
		}
		return prop.getProperty(key, defaultValue);
	}
	
	/**
	 * 更改属性的值
	 * @param key
	 * @param value
	 * @param isSave, 是否保存到配置文件中
	 */
	public synchronized void setValue(String key, String value, boolean isSave) {
		prop.setProperty(key, value);
		if(isSave){
			FileOutputStream os = null;
			try {
				os = new FileOutputStream(CONFIG_FILE);
				prop.store(os, "");
			} catch (IOException e) {
				logger.error("修改配置文件异常:[" + CONFIG_FILE + "], " + e.getMessage(), e);
			} finally {
				if(os != null){
					try {
						os.close();
					} catch (Exception e) {
					}
				}
			}
		}
	}
	
	/**
	 * 重新加载配置文件中所有属性
	 */
	public synchronized void reload(){
		this.reload = true;;
	}

以上代码中,以RUNTIME_HOME的参数方式,动态获取当前类运行的项目的路径,在eclipse的主类上右键配置运行在弹出的窗口中选择自变量tab页的VM自变量中设置

-DRUNTIME_HOME=${workspace_loc:cn.test}参数后,当类运行后就可以取到当前的绝对路径/cn.test目录。

本文出自 “菜鸟学习” 博客,请务必保留此出处http://biyusheng.blog.51cto.com/2626140/1758325

以上是关于java通过虚拟机设置参数的方式动态获取当前项目的绝对路径的主要内容,如果未能解决你的问题,请参考以下文章

Python项目自动生成当前项目的requirements文件

理解JAVA虚拟机(下)

java虚拟机——双亲委派模型

asp.net网站在IIS上获取虚拟路径的问题!

springboot 获取当前项目的端口号 ip

springboot 获取当前项目的端口号 ip