`

java 读写 properties

    博客分类:
  • java
阅读更多

 

一、

 

/*
 * @(#)RWProperties.java  2010-10-28
 * 
 * Copyright 2010 BianJing,All rights reserved.
 */
package test;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 用于读写Property属性配置文件的类
 * 
 * @author BianJing<br/>
 *         E-mail:vipbooks@163.com
 * @version 0.9 2010-10-28
 */
public class RWProperties {
    private Properties properties;

    /** 配置文件的完整路径 */
    private String filePath;

    /**
     * 初始化RWProperties
     * 
     * @param propertyFilePath
     *            属性配置文件的完整路径,
     *            如:"com/pagination/config/PaginationConfig.properties"
     * @return RWProperties的实例
     */
    public RWProperties(String propertyFilePath) {
        filePath = propertyFilePath;
        properties = getProperties(propertyFilePath);
    };

    /**
     * 获得Key值所对应的Value值。
     * 
     * @param key
     *            属性配置文件的Key值
     * @return Key值所对应的Value值
     */
    public String getProperty(String key) {
        return properties.getProperty(key);
    }

    /**
     * 修改属性配置文件
     * 
     * @param key
     *            属性配置文件的Key值
     * @param value
     *            属性配置文件的value值
     * @param propertyFilePath
     *            属性配置文件的完整路径,
     *            如:"com/pagination/config/PaginationConfig.properties"
     * @return 修改成功返回true,失败则返回false
     */
    public boolean setProperty(String key, String value) {
        FileOutputStream fos = getFileOutputStream(filePath);

        properties.setProperty(key, value);
        boolean flag = false;
        try {
            properties.store(fos, null);
            flag = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.flush();
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    close();
                } finally {
                    fos = null;
                }
            }
        }

        return flag;
    }

    /**
     * 移除属性配置文件中的某个属性
     * 
     * @param key
     *            属性配置文件的Key值
     * @return 移除成功返回true,失败则返回false
     */
    public boolean removeProperty(String key) {
        FileOutputStream fos = getFileOutputStream(filePath);

        properties.remove(key);
        boolean flag = false;
        try {
            properties.store(fos, null);
            flag = true;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.flush();
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    close();
                } finally {
                    fos = null;
                }
            }
        }

        return flag;
    }

    /**
     * 释放资源
     */
    public void close() {
        if (properties != null) {
            properties.clear();
        }
    }

    /**
     * 返回加载了配置文件的Properties对象
     * 
     * @param propertyFilePath
     *            属性配置文件的完整路径,
     *            如:"com/pagination/config/PaginationConfig.properties"
     * @return java.util.Properties
     */
    private Properties getProperties(String propertyFilePath) {
        Properties properties = new Properties();
        InputStream is = null;
        try {
            is = RWProperties.class.getClassLoader().getResourceAsStream(
                    propertyFilePath);

            properties.load(is);
        } catch (NullPointerException e) {
            e.printStackTrace();
            close();
        } catch (IOException e) {
            e.printStackTrace();
            close();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    is = null;
                }
            }
        }

        return properties;
    }

    /**
     * 返回已经加载了配置文件的文件输出流
     * 
     * @param propertyFilePath
     *            属性配置文件的完整路径,
     *            如:"com/pagination/config/PaginationConfig.properties"
     * @return java.io.FileOutputStream
     */
    private FileOutputStream getFileOutputStream(String propertyFilePath) {
        FileOutputStream fos = null;
        String filePath = null;

        filePath = RWProperties.class.getClassLoader().getResource(
                propertyFilePath).getFile();
        filePath = filePath.replaceFirst("/", "");
        // 如果URL地址中含有空格,则空格会被"%20"替换,所以要将它替换回来
        filePath = filePath.replaceAll("%20", " ");
        try {
            fos = new FileOutputStream(filePath);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            close();
        }

        return fos;
    }
}

 

二、

package js.thread;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * アプリ共通ユーティリティクラスです。
 * @author 
 * @version $Revision: 1.2 $
 */
public final class Util {
    /**
     * コンストラクタ。<BR>
     * <BR>
     */
    private Util() {
    }

    /**
     * 指定したプロパティファイルを読み込む。<BR>
     * <BR>
     * 引数のクラス置く場所で、引数のファイルをプロパティファイルとして読み込む。<BR>
     * @param strFile プロパティファイル名
     * @param cls プロパティファイル置く場所(クラス置く場所と同様)
     * @return Properties 読み込むプロパティ
     * @throws IOException 読み込む異常の場合
     */
    @SuppressWarnings ("unchecked")
    public static Properties loadProp(String strFile, Class cls)
        throws IOException {
        Properties pReturn = new Properties();
        InputStream input = cls.getClassLoader().getResourceAsStream(strFile);//classpath root
        //InputStream input1 = cls.getResourceAsStream(strFile);//プロパティファイル置く場所(クラス置く場所と同様)
        if (input == null) {
            return null;
        }
        try {
            pReturn.load(input);
        } finally {
            try {
                input.close();
            } catch (IOException ioExp) {
                // do nothing
            }
        }
        return pReturn;
    }

    /**
     * 指定したプロパティファイルを読み込む。<BR>
     * <BR>
     * 引数のファイルをプロパティファイルとして読み込む。<BR>
     * @param strFile プロパティファイル名
     * @return Properties 読み込むプロパティ
     * @throws IOException 読み込む異常の場合
     */
    public static Properties loadProp(String strFile) throws IOException {
        Properties pReturn = new Properties();
        InputStream input = new FileInputStream(strFile);
        try {
            pReturn.load(input);
        } finally {
            try {
                input.close();
            } catch (IOException ioExp) {
                // do nothing
            }
        }
        return pReturn;
    }

    /**
     * 文字列空白チェック関数<BR>
     * <BR>
     * 引数の文字列が空白(連続空白も含む)、またはnullの場合、trueを返す。<BR>
     * それ以外の場合はfalseを返す。
     * @param strParam チェック対象文字列
     * @return 文字列空白判定結果(true:空白 false:空白ではない)
     */
    public static boolean isStrNull(String strParam) {
        if (strParam == null) {
            return true;
        }
        if ("".equals(strParam.trim())) {
            return true;
        }
        return false;
    }

    /**
     * 指定文字列から改行を取り外す。<BR>
     * @param src String 文字列
     * @return String 改行を取り外された文字列
     */
    public static String removeLineBreaks(String src) {
        String ret = src;
        if (ret != null) {
            ret = ret.replace("\r\n", " ");
            ret = ret.replace("\r", " ");
            ret = ret.replace("\n", " ");
        }
        return ret;
    }
}
 
package js.thread;


import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Properties;



public abstract class AbstractEnvironment {
    /** 空白文字列 */
    public static final String STR_BLANK = "";

    /** 文字コード変換から */
    private static final String ENCODE_FROM = "iso-8859-1";

    /** 文字コード変換へ */
    private static final String ENCODE_TO = "UTF-8";

    /** 異常メッセージ */
    private static final String FAIL = "設定ファイル読み込む失敗";

    /** 設定ファイル */
    protected Properties prop;

    /** 文字コード変換 */
    boolean isNeedCodeChg = true;

    /**
     * コンストラクタ<BR>
     * <BR>
     * 引数より、設定ファイルの内容を読み込む。<BR>
     * 引数の「cls」がnullの場合、「strFile」を直接ファイルシステムから読み込む、<BR>
     * 引数の「cls」がnullではないの場合、「cls」のクラスから「strFile」のリソースをシステムから読み込む。<BR>
     * @param strFile 設定ファイル
     * @param cls クラス
     * @throws EnvironmentException 設定ファイル読み込む異常の場合
     */
    @SuppressWarnings ("unchecked")
    protected AbstractEnvironment(String strFile, Class cls)
        throws RuntimeException {
        try {
            if (strFile == null) {
                throw new RuntimeException(FAIL);
            }
            if (cls == null) {
                prop = Util.loadProp(strFile);
                isNeedCodeChg = false;
            } else {
                prop = Util.loadProp(strFile, cls);
            }

            if (prop == null) {
                throw new RuntimeException(FAIL);
            }
        } catch (IOException ioExp) {
            throw new RuntimeException(FAIL);
        }
    }

    /**
     * 引数の設定キーより、設定値を取得する。<BR>
     * 設定キーが存在しない場合、空白を返す。
     * @param strKey 設定キー
     * @return String 設定値
     */
    public String getValue(String strKey) {
        return getValueByParam(strKey, null);
    }

    /**
     * 引数の設定キーと設定値に埋め込み文字列より、設定値を取得する。<BR>
     * 埋め込み文字列の置換パターンは{n}となる、「n」が0からの正数字となります。<BR>
     * メモリ上に保存するメッセージをUTF-8に変換し、返す。<BR>
     * 設定キーが存在しない場合、空白を返す。
     * @param strKey 設定キー
     * @param strArgs 設定値に埋め込み文字列
     * @return String 埋め込み文字列置換後の設定値
     */
    public String getValueByParam(String strKey, String[] strArgs) {
        String strValue = prop.getProperty(strKey);
        if (Util.isStrNull(strValue)) {
            strValue = STR_BLANK;
        } else {
            if (isNeedCodeChg) {
                try {
                    strValue = new String(strValue.getBytes(ENCODE_FROM),
                        ENCODE_TO);
                } catch (UnsupportedEncodingException endExp) {
                    strValue = FAIL;
                }
            }
        }

        if (strArgs != null) {
            for (int i = 0; i < strArgs.length; i++) {
                if (strArgs[i] == null) {
                    strValue = strValue.replace("{" + i + "}", STR_BLANK);
                } else {
                    strValue = strValue.replace("{" + i + "}", Util
                        .removeLineBreaks(strArgs[i]));
                }
            }
        }
        return strValue;
    }
}
 
package js.thread;


/**
 * システム設定値を提供する共通用クラスです。<br>
 * <br>
 * 運用時に、外部ファイルに設定されたシステム設定値を提供する。<br>
 * <p>
 * 用例:<br>
 * Setting.init();<br>
 * <br>
 * String strSetting = Setting.getInstance().getValue("システム設定キー");<br>
 * </p>
 * @author 
 * @version $Revision: 1.2 $
 */
public final class Setting extends AbstractEnvironment {
    /** システム設定シングルトン */
    private static AbstractEnvironment environment;

    /**
     * コンストラクタ<BR>
     * <BR>
     * 引数より、システム設定ファイルの内容を読み込む。<BR>
     * @param strFile システム設定ファイル
     * @throws EnvironmentException システム設定ファイル読み込む異常の場合
     */
    private Setting(String strFile) throws RuntimeException {
        super(strFile, Setting.class);
    }

    /**
     * システム設定クラスを初期化する。<BR>
     * <BR>
     * 引数より、システム設定ファイルの内容を読み込む。<BR>
     * 設定ファイルからUTF-8で保存する内容をiso-8859-1でメモリ上に保存する。
     * @param strFile システム設定ファイル
     * @throws EnvironmentException システム設定ファイル読み込む異常の場合
     */
    public static void init(String strFile) throws RuntimeException {
        environment = new Setting(strFile);
    }

    /**
     * システム設定の実例クラスを取得する。<BR>
     * @return Setting 実例クラス
     */
    public static AbstractEnvironment getInstance() {
        return environment;
    }
}
 
package js.thread;

public class TestProperties {

    public static void main(String[] args) {
         Setting.init("messageResource_en_US.properties");
         AbstractEnvironment s = Setting.getInstance();
         System.out.println(s.getValue("a"));
        
    }
}
 

 

 

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    java读写properties配置文件

    ### Java读写Properties配置文件详解 #### 一、引言 在Java开发中,`Properties`类被广泛用于处理各种类型的配置文件。这些文件通常包含了应用程序运行时所需的配置信息,如数据库连接信息、系统参数等。`...

    java读写properties文件,解决系统找不到指定路径,解决写入后读取正常,但文件数据未更新问题

    在Java编程中,Properties文件是用于存储配置信息的关键组件,如数据库连接字符串、应用程序设置等。在处理Properties文件时,可能会遇到几个常见的问题,包括找不到指定路径、读取正常但文件数据未更新的情况。以下...

    java读写properties文件,解决系统找不到指定路径,解决写入后读取正常,但文件数据未更新问题

    总结一下,处理Java中的Properties文件读写时,需要注意文件路径的准确性、文件的读写权限以及缓存问题。通过以上方法,应该能够有效解决描述中提到的问题。对于提供的"新建文本文档.txt",虽然不是Properties文件,...

    java对properties配置文件的读和写

    在Java编程中,`properties`文件是用于存储应用程序配置信息的一种简单文本格式。这些文件通常包含键值对,其中键和值之间用等号或冒号分隔。本篇文章将详细探讨如何在Java中读取、写入、修改以及删除`properties`...

    Java读写properties文件解决中文乱码问题.docx

    Java读写properties文件解决中文乱码问题 Java读写properties文件是在Java开发中一种常见的配置文件读写方式,但是在读写properties文件时,经常会遇到中文乱码问题。下面将详细介绍Java读写properties文件解决中文...

    Java源码读写Properties文件.rar

    这个压缩包“Java源码读写Properties文件.rar”包含了一份关于如何使用Java来读取和写入Properties文件的源代码示例。下面我们将详细探讨这个主题。 首先,Properties类是Java的标准库类,位于`java.util`包下,它...

    Java 读写Properties配置文件详解

    Java中的Properties类是处理配置文件的关键工具,它用于存储应用程序的配置信息,这些信息通常以键值对的形式存在,键和值都是字符串类型。Properties类继承了Hashtable类,并且实现了Map接口,这意味着它可以像Map...

    java读写xxx.properties文件实用小例

    在Java编程中,读写`.properties`文件是一个常见的任务,这些文件通常用于存储配置信息、设置或环境变量。本文将深入探讨如何在Java中高效地处理`.properties`文件,包括读取、写入以及更新其内容。我们将参考提供的...

    java 改变Properties文件中的键值

    在Java代码中,首先需要导入`java.util.Properties`和`java.io.*`等相关的类库,以便进行读写Properties文件的操作。 2. **加载Properties文件** 使用`Properties`类的`load()`方法加载Properties文件。这个方法...

    使用java读写properties文件属性

    自己定义一个属性文件:例如prop.properties  baseFilePath=D:/kuanter/resource  tesx=abcd  我们要做的第一步是要将文件读取到Properties类对象中,由于load有一个参数是InputStream,所以我们可以用 ...

    java操作properties方法

    在Java编程中,操作配置文件,尤其是`.properties`文件,是一项常见的任务。`.properties`文件主要用于存储应用程序的配置信息,通常包含键值对,其中键是唯一的标识符,值是与该键相关联的数据。Java提供了`java....

    java读取properties配置文件

    - 锁定与并发:如果多个线程同时读写`Properties`对象,需考虑同步控制,以避免数据不一致。 通过以上内容,你应该能够理解并实现Java中读取`properties`配置文件的基本操作。在实际项目中,还可以结合Spring框架...

    Java读写.properties文件解决中文乱码问题

    本篇文章将深入探讨如何解决Java读写.properties文件时的中文乱码问题。 首先,了解.properties文件的特性。这种文件的默认编码通常是ISO-8859-1,它不支持中文字符。因此,当文件中含有中文时,必须明确指定读写时...

    JAVA读取properties文件的值

    在处理`.properties`文件时,可能会遇到文件找不到、读写权限不足等问题。因此,需要适当地捕获和处理`IOException`。 ### 8. 使用`@ConfigurationProperties` Spring框架提供了一种更高级的方式来绑定`....

    javaproperties:用于读写Java .properties文件的Python库

    javaproperties通过基于json模块的简单API提供对读写(简单的面向行格式和XML)的支持-尽管,为了恢复Java迷,它还包括旨在匹配行为的Properties类。 Python 尽可能多地使用 。 javaproperties版本的javaproperties...

    Java写的Properties读写类

    Java自带的Properties不好用,自己写了一个直接读写类,支持配置文件描述,支持对像值的描述,支持指定文件编码(默认UTF-8)

    Java Properties 解决中文乱码和顺序读写.docx

    Java Properties 类是Java标准库中用于处理配置文件的关键组件,主要负责存储和加载键值对数据,常用于管理应用程序的配置信息。配置文件通常以`.properties`为扩展名,采用文本格式,每行包含一个键值对,键和值...

    java读取properties文件

    这个类提供了一种存储和加载属性列表的方法,它能够处理`.properties`文件的读写操作。 1. 加载`properties`文件: 要读取`properties`文件,我们首先需要创建一个`Properties`对象,然后使用`load()`方法从输入流...

    Java代码实现对properties文件有序的读写的示例

    然而,在读写Properties文件时,需要注意元素的顺序,因为Properties继承自HashTable,直接通过keySet()、keys()或entrySet()方法对Properties中的元素进行遍历时取出来的内容顺序与properties文件中的顺序不一致。...

    Python实现读取Properties配置文件的方法

    在Python编程中,有时我们需要处理Java开发中常用的`.properties`配置文件。虽然Python标准库并未直接提供处理此类文件的模块,但我们可以自定义一个类来实现这个功能。本篇文章将详细探讨如何通过Python来读取并...

Global site tag (gtag.js) - Google Analytics