项目中一般会有多个配置properties文件,写了一个读取的工具类,见类图和代码
类说明:
ClassPathPropsReader:class path properties reader
ClassNamePropsReader:按类名查找properties文件位置,properties文件名和类名相同、放置在同一个包下
PropsReaderFactory:ClassPathPropsReader静态工厂方法类
主要代码:
package properties; import java.io.IOException; import java.util.Properties; /** * class path properties reader * * @author Mov * @version 1.0 Mov 2013-2-2 下午08:21:38 create * @see ClassNamePropsReader * @see PropsReaderFactory */ public abstract class ClassPathPropsReader { private static Properties props; private void init() { if (props == null) { synchronized (this) { props = new Properties(); try { String filePath = getFilePath(); props.load(this.getClass().getClassLoader() .getResourceAsStream(filePath)); } catch (IOException e) { e.printStackTrace(); } } } } /** * 获取properties文件路径 * @return 返回格式如:com/XXX/YYY/Zzz.properties */ protected abstract String getFilePath(); @SuppressWarnings("unchecked") public final <T> T getProperty(String key, T defaultValue) { init(); try { String val = props.getProperty(key, null); Object ret = null; if (val == null || "".equals(val)) { ret = null; } else if (defaultValue instanceof String) { ret = val; } else if (defaultValue instanceof Integer) { ret = Integer.parseInt(val); } else if (defaultValue instanceof Boolean) { ret = val.toLowerCase().equals("true"); } else if (defaultValue instanceof Long) { ret = Long.parseLong(val); } else if (defaultValue instanceof Byte) { ret = Byte.parseByte(val); } else if (defaultValue instanceof Float) { ret = Float.parseFloat(val); } else if (defaultValue instanceof Double) { ret = Double.parseDouble(val); } else if (defaultValue instanceof Character) { ret = val.charAt(0); } else { ret = null; } return ret != null ? (T) ret : defaultValue; } catch (RuntimeException e) { return defaultValue; } } }
package properties; import java.io.File; /** * properties文件名和类名相同、放置在同一个包下 * * <pre> * 如: * 类全名为a.b.c.Test * 则properties文件名为 a\b\c\Test.properties * * 此时可以直接继承{@link #ClassNamePropsReader} * </pre> * * @author Mov * @version 1.0 Mov 2013-2-2 下午08:23:13 create */ public class ClassNamePropsReader extends ClassPathPropsReader { @Override protected String getFilePath() { String fullClassName = this.getClass().getCanonicalName(); return fullClassName.replace('.', File.separatorChar) + ".properties"; } }
package properties; import java.util.HashMap; import java.util.Map; /** * ClassPathPropsReader静态工厂方法类 * * @author Mov * @version 1.0 Mov 2013-2-2 下午08:25:24 create */ public class PropsReaderFactory { private static Map<Class<? extends ClassPathPropsReader>, ClassPathPropsReader> readers = new HashMap<Class<? extends ClassPathPropsReader>, ClassPathPropsReader>(); public static ClassPathPropsReader getInstance(Class<? extends ClassPathPropsReader> cls) { if (readers.get(cls) == null) { try { ClassPathPropsReader reader = cls.newInstance(); readers.put(cls, reader); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } return readers.get(cls); } }
测试:
package properties; import properties.xxx.yyy.HelloWorld; /** * * @author Mov * @version 1.0 Mov 2013-2-2 下午09:03:48 create */ public class Test { public static void main(String[] args) { ClassPathPropsReader reader = PropsReaderFactory.getInstance(HelloWorld.class); String str0 = reader.getProperty("str0", "_____"); String str2 = reader.getProperty("str2", "_____"); System.out.println(str0); System.out.println(str2); int int0 = reader.getProperty("int0", -1); int int2 = reader.getProperty("int2", -1); System.out.println(int0); System.out.println(int2); boolean boolean0 = reader.getProperty("boolean0", Boolean.TRUE); boolean boolean2 = reader.getProperty("boolean2", Boolean.TRUE); System.out.println(boolean0); System.out.println(boolean2); char char0 = reader.getProperty("char0", '_'); System.out.println(char0); } }
缺少的文件在附件中
相关推荐
这个"读取properties文件工具类"是为了简化程序中对`.properties`文件的读取操作而设计的。通过这样的工具类,开发者可以方便地加载和获取配置文件中的属性值,避免重复编写相同的代码。下面我们将详细探讨`...
"读取Properties信息工具类"是指一个自定义的Java类,它封装了与Properties文件交互的过程,通常包括加载、获取和更新属性值等操作。这样的工具类能够使代码更具有可维护性和复用性,避免在多个地方重复处理...
总结来说,Android中读取`.properties`文件主要涉及`Properties`类的使用,文件的存放位置(如`assets`或`res/raw`),以及适当的错误处理和资源管理。理解这些知识点有助于开发者更高效地管理和使用配置文件。
Java读取、修改utils.properties工具类,可直接拿去用。
2. **读取配置文件的工具类设计** - 类结构:工具类通常命名为`ConfigReader`,包含静态方法,以便在程序任何地方无需实例化就能调用。 - 方法设计:关键方法应包括`getProperty(String key)`,用于根据给定的键...
这些工具类帮助开发者读取、写入以及管理应用程序的配置信息,通常以`.properties`文件的形式存在。`.properties`文件是一种键值对格式,用于存储程序的设置或数据,如数据库连接字符串、应用配置参数等。 `...
### ResourceBundle与Properties读取Maven中Resources目录下的资源文件 #### 一、概述 在Java开发过程中,我们经常需要读取资源文件中的配置信息。在Maven项目中,`src/main/resources`目录下通常存放了各种配置...
本压缩包包含两个工具类,分别用于读取`.yml`和`.properties`格式的配置文件,这两种格式都是Java开发中常见的配置文件类型。 首先,我们来看`.properties`配置文件。这种格式的文件历史较为悠久,它的语法简单,每...
总结来说,`YmlUtil.java`和`PropertiesUtil.java`是Java开发中的实用工具类,它们简化了YAML和Properties配置文件的读取和修改过程,提高了代码的可维护性和灵活性。理解和使用这些工具类,对于提升Java项目管理...
为了在Python中读取这样的文件,我们可以创建一个名为`Properties`的类,该类包含两个方法:`__init__`和`getProperties`。`__init__`用于初始化类实例,并接收文件路径作为参数;`getProperties`方法负责打开文件,...
在Java代码中,我们首先创建一个`Properties`对象,它是读取Properties文件的核心工具。 ```java Properties prop = new Properties(); ``` 2. **加载Properties文件**: 使用`InputStream`来读取Properties...
这些给定的文件名表明它们是Java编程语言中的工具类,用于处理XML配置文件的读取和管理。以下是对这些类可能包含的功能的详细解释: 1. **PortalConfig.java**:这个类可能专门用于处理与门户应用相关的配置信息。...
此外,此类还可以作为学习Java IO和自定义类设计的一个实例,理解如何扩展标准库的功能以满足特定需求。 在实际开发中,我们可以通过以下方式使用`CommentedProperties`: ```java CommentedProperties props = ...
总的来说,理解和掌握Java中资源文件的读取方法以及如何使用自定义工具类处理这些文件,对于提升代码的可维护性和可扩展性具有重要意义。通过`KeyValueUtils.java`和`KeyValue.java`,我们可以有效地管理和操作键值...
总结来说,`Properties` 类是 Java 中处理 `.properties` 配置文件的关键工具,它提供了方便的接口,让我们能够轻松地在程序中管理和操作配置信息。这使得 Java 应用程序能够适应不同环境,提升灵活性和可维护性。
`Properties`类是Java中处理配置文件的强大工具,它不仅提供了加载和读取`.properties`文件的功能,还支持写入和保存属性,使得开发人员能够轻松地管理应用程序的各种配置信息。掌握`Properties`类的使用对于任何...
最近面试java开发,遇到很是蛋疼一道题。题目是写一个java程序批量读取properties文件的数据,按照每列属性每行每行读出来,由于很久都没写过工具类 回来复习了一下简单写了个工具类有兴趣可以看看。
总之,“Properties文件比较工具”是Java开发中一个实用的小型应用,它利用了Java标准库提供的`Properties`类,为开发者提供了便利,提高了工作效率。通过分析`diffProperties.java`和`property.java`源代码,我们...
在这个场景中,我们将探讨如何在Java中读取这类文件,以及一些相关的工具和技术。 首先,我们需要了解`.properties`文件的结构。每个属性由一行表示,键和值之间用等号(=)或冒号(:)分隔,例如: ``` database....