`

Java配置项

阅读更多
   背景:项目中有许多可选参数,这时如果采取硬编码的方式将非常不利于扩展,因此想到将参数写进配置文件,需要参数时再从配置文件中进行加载。
public class TestConfig {
    
    protected final static String enc = "utf-8";
    private final static String LINE_SEPARATOR = System.getProperty("line.separator");
    
    protected static Properties init(String configPath) {
        Properties p = new Properties();
        InputStream in = null;
        try {
            URL confFile = TestConfig.class.getClassLoader().getResource(configPath);
            in = confFile.openStream();
            p.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return p;
    }
    
    protected static String getProperty(Properties p, String key) {
        return p.getProperty(key.trim());
    }

    protected static boolean writeProperty(Properties p, String configPath, String key, String value) throws IOException {
        FileOutputStream out = new FileOutputStream(URLDecoder.decode(TestConfig.class.getClassLoader().getResource(configPath).getPath(), enc));
        BufferedOutputStream bos = new BufferedOutputStream(out);
        boolean isExistPropertyName = false;
        try {
            for (String tmpKey : p.stringPropertyNames()) {
                String line;
                if(key.equals(tmpKey)) {
                    isExistPropertyName = true;
                    p.setProperty(key, value);
                    line = tmpKey + "=" + value + LINE_SEPARATOR;
                } else {
                    line = tmpKey + "=" + p.getProperty(tmpKey) + LINE_SEPARATOR;
                }
                byte[] linebytes = line.getBytes(enc);
                bos.write(linebytes);
            }
            if(!isExistPropertyName) {
                p.put(key, value);
                String newLine = key + "=" + value + LINE_SEPARATOR;
                bos.write(newLine.getBytes(enc));
            }
            return true;
        } finally {
            bos.flush();
            bos.close();
        }
    }
}

调用方式:
public class MyConfigUtil extends TesttConfig {

    private static Properties p = new Properties();

    private final static int DEFAULT_SECURITY_POLICY_PORT = 5907;
    private final static String DEFAULT_GOOGLE_MAP_KEY = "ABQIAAAAWA_efwiQDHrv6MYDa3HE3hTwM0brOpm-All5BF6PoaKBxRWWERSSjUV6DjLhSErRl9rovZBNtOhfds";
    private final static String DEFAULT_GOOGLE_MAP_SERVER_URL="http://ditu.google.cn/maps";
    
    static {
        p = init(CONFIG_PATH);
    }
    
    //google map key
    public static String getGoogleMapKey() {
        String googleMapKey = getProperty(p, GOOGLE_MAP_KEY);
        if(googleMapKey == null || "".equals(googleMapKey)) {
            return DEFAULT_GOOGLE_MAP_KEY;
        }
        return googleMapKey;
    }
    public static boolean saveGoogleMapKey(String value) throws IOException {
        return writeProperty(p, CONFIG_PATH, GOOGLE_MAP_KEY, value);
    }
    
    //securityPort
    public static int getSecurityPolicyPort() throws Exception {
        File appFile = getFlexAppConfig();
        int port = -1;
        XMLBuilder builder = XMLBuilder.createBuilder(appFile);
        NodeList policyList = builder.findNodeList(APPLICATION_SECURITY_POLICY_PORT);
        if(policyList != null && policyList.getLength() > 0) {
            Node node = policyList.item(0);
            port = Integer.parseInt(node.getTextContent());
        }
        if(port == -1) {
            return DEFAULT_SECURITY_POLICY_PORT;
        }
        return port;
    }
    
    private static File getFlexAppConfig() throws UnsupportedEncodingException {
    	String filePath = URLDecoder.decode(AbstractConfig.class.getClassLoader().getResource(APP_CONFIG).getPath(), enc);
        return new File(filePath);
    }
}

解析之读属性:
a、URL confFile = TestConfig.class.getClassLoader().getResource(configPath);//查找指定名称的资源,资源是可以通过类代码以与代码基无关的方式访问的某些数据(图像、声音、文本等)。
    资源名称是以 '/' 分隔的标识资源的路径名称。

b、 in = confFile.openStream();//打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。此方法是下面方法的缩写:
     openConnection().getInputStream()

c、 p.load(in);//从输入流中读取属性列表(键和元素对)

d、String googleMapKey = getProperty(p, GOOGLE_MAP_KEY);//通过键搜索属性

  疑问:为什么使用到了ClassLoader机制,直接读不行吗?

解析之写属性:研究对象为writeProperty方法
a、 URLDecoder.decode(TestConfig.class.getClassLoader().getResource(configPath).getPath(), enc);//对路径进行解码
     URLDecoder:HTML 格式解码的实用工具类。该类包含了将 String 从application/x-www-form-urlencoded MIME 格式解码的静态方法

b、  p.stringPropertyNames()返回此属性列表中的键集
分享到:
评论

相关推荐

    Java配置.rar

    Java配置是IT行业中常见的一项工作,它涉及到Java开发环境的搭建和管理,这对于任何Java开发者来说都是基础且至关重要的。本压缩包“Java配置.rar”提供了构建Java开发环境所需的关键工具,包括Jdk 1.8、Maven、...

    java配置管理系统.rar

    7. **可视化界面**:提供图形用户界面(GUI)以方便管理员操作,显示配置项、版本信息和变更日志。 8. **集成能力**:与持续集成/持续部署(CI/CD)工具如Jenkins、GitLab CI/CD等集成,确保配置在部署过程中的一致性...

    JAVA读取配置文件源码

    这个例子中,我们使用`Files.readString()`读取整个文件内容,然后通过`lines()`和`Collectors.toMap()`转换成一个Map,方便访问配置项。 **注意事项** 1. 当配置文件不在项目类路径下时,需提供绝对路径或相对...

    JAVA配置文件编写说明文档

    3. **注释**:为每个重要的配置项添加注释,解释其用途和可能的值。这对于后期维护和团队协作非常有用。 4. **安全考虑**:避免在配置文件中暴露敏感信息,如数据库密码或API密钥。可以使用环境变量或加密方法来...

    读配置项源码.rar

    在IT行业中,配置项管理是软件开发过程中的关键环节,它涉及到应用程序的设置、环境变量、数据库连接信息等。源码级别的理解配置项对于优化代码、调试和维护系统至关重要。"读配置项源码.rar"可能包含了一系列关于...

    windchill java开发环境手册

    重要的.properties文件包括wt.properties(包含主要的Java配置项和Windchill系统配置项),service.properties(包含Windchill动态代理模式的配置项),db.properties(包含数据库的配置信息)。 6. 使用Eclipse...

    java环境配置环境配置

    在IT领域,尤其是在软件开发与Java编程环境中,正确配置Java环境是确保项目顺利进行的关键步骤。根据提供的文件信息,我们将深入探讨如何配置Java环境,包括CLASSPATH、JAVA_HOME、JBOSS_HOME以及Path等关键环境变量...

    整合JAVA框架配置文件

    4. **注释的重要性**:在配置文件中添加清晰的注释对于初学者来说极其宝贵,可以帮助理解每个配置项的作用,便于学习和调试。注释应详细解释配置的目的、如何工作以及可能的修改选项。 5. **最佳实践**:在整合过程...

    java配置GDAL库的大坑

    "Java 配置 GDAL 库的大坑" Java 配置 GDAL 库时容易遇到的问题是版本不一致导致的错误。GDAL 库是一个开源的地理信息系统(GIS)库,提供了对栅格和矢量数据的支持。在 Java 中使用 GDAL 库需要将其配置到 Java ...

    java配置管理系统(老项目)

    它通常采用键值对的形式存储配置项,便于检索和管理。 2. **客户端SDK**:系统中的各个微服务或应用会集成这个SDK,以连接配置中心并获取相应的配置信息。在本项目中,客户端是基于Netty4实现的,Netty是一个高性能...

    java配置文件 beta v1.0

    4. 获取配置项:通过`Properties.getProperty()`方法获取特定的配置项。 5. 写入配置:如果需要修改或添加配置,可以使用`Properties.setProperty()`,然后调用`Properties.store()`来保存更改。 然而,这个"Java...

    利用Java并配置Foxmail发送邮箱(携带附件)

    这就是使用Java配置Foxmail发送带有附件的邮件的基本步骤。当然,实际应用中可能需要处理更多细节,比如异常处理、邮件格式化、HTML内容支持等。如果你有`Java发邮箱(带附件).docx`文档,可以参考其中的示例代码...

    java classpath 配置详细讲解

    对于初学Java的朋友而言,配置Java环境常常是一项艰巨的任务,尤其是如何正确设置`classpath`。这篇文章将通过一系列实际操作来详细阐述`classpath`的配置过程,帮助大家解决在配置过程中可能遇到的问题。 #### 二...

    JAVA高手解析XML配置文件的读取操作.pdf

    使用 XML 作为配置文件有很多好处,例如可以轻松地更改配置项,而不需要修改代码。 在读取 XML 配置文件时,有多种解析器可以选择,主要有 DOM 和 SAX 两种。DOM 解析器将整个 XML 文件加载到内存中,然后进行解析...

    java环境变量配置

    在Java配置中,我们需要添加`%JAVA_HOME%\bin` 和 `%JAVA_HOME%\jre\bin` 到Path变量中。这样,当你在命令行输入 `java`, `javac`, 或其他Java相关命令时,系统能够找到这些可执行文件。 示例中的Path变量值包含了...

    java 上传图片配置

    在Java Web开发中,实现图片上传功能是一项常见的需求。这个配置文档主要涵盖了如何在Java环境中配置和使用相关工具来处理图片上传的过程。首先,我们来深入理解涉及的关键知识点。 1. **Servlet与Multipart解析器*...

    java运行环境配置

    总结来说,Java运行环境的配置是一项基础但重要的工作,它确保了Java程序能够正常编译和运行。理解并掌握这个过程,对于学习和开发Java应用程序至关重要。通过正确配置环境变量,我们可以方便地利用JDK提供的工具,...

Global site tag (gtag.js) - Google Analytics