3
回答
java的Properties文件里面可以有怎样灵活的写法?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

例如我在文件前面定义了:
user_home=D:/home
那么在文件下面我是否可以使用:
file_upload_path=${user_home}/fileUpload/
这种形式调用它呢?
还有java是有系统参数,是否可以使用:
file_download_path=${user.home}/fileUpload/
调用user.home这个系统配置呢?

还有什么可用的灵活的配置方法和常用的配置参数呢?
貌似struts可以用:
login_msg=欢迎您:${1}!
这样的配置。

举报
cokolin
发帖于5年前 3回/6K+阅

以下是问题补充:

  • @cokolin :如果上面的方法不可行,请指正! (5年前)
共有3个答案 最后回答: 5年前
package properties;

import java.io.IOException;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PropertiesTool {
	private static final Pattern PATTERN = Pattern
			.compile("\\$\\{([^\\}]+)\\}");

	public static String get(Properties properties, String key) {
		String value = properties.getProperty(key);
		Matcher matcher = PATTERN.matcher(value);
		StringBuffer buffer = new StringBuffer();
		while (matcher.find()) {
			String matcherKey = matcher.group(1);
			String matchervalue = properties.getProperty(matcherKey);
			if (matchervalue != null) {
				matcher.appendReplacement(buffer, matchervalue);
			}
		}
		matcher.appendTail(buffer);
		return buffer.toString();
	}

	public static void main(String[] args) throws IOException {
		Properties properties = new Properties();
		properties.load(PropertiesTool.class
				.getResourceAsStream("test.properties"));
		System.out.println(get(properties, "root"));
		System.out.println(get(properties, "file"));
	}
}

test.properties

root=/a
file=${root}/c

输出

/a
/a/c

看来都理解错了,我的意思其实是properties是不是自带了 @canghailan 这种自动转译的方法,不用自己另外写一个工具类来解析的,类似 scss ,前面定义全局变量,改一个就可以改全部。
--- 共有 2 条评论 ---
canghailan的确没有自带,想用起来方便继承重写取值方法呗。 5年前 回复
JustForFly这个貌似没有自带, 应该都需要写工具类。 5年前 回复
顶部