Class类中的InputStream getResourceAsStream(String name):查找具有给定名称的资源。 用于搜索与给定类相关联的资源的规则由类的定义类加载器实现。 此方法委托给该对象的类加载器。 如果此对象由引导类加载器加载,则该方法委托到ClassLoader.getSystemResourceAsStream(java.lang.String).
读取配置文件代码如下:
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
class AppConfig
{
public void readApp() throws IOException
{
Properties p = new Properties();
InputStream fis = null;
fis = AppConfig.class.getResourceAsStream("fffonfig.properties");
if (fis == null)
{
System.out.println("读取文件出错!");
System.exit(0);
}
p.load(fis);
String param1 = p.getProperty("param1");
String param2 = p.getProperty("param2");
System.out.println("param1"+param1+"param2"+param2);
}
}
public class SingleTest {
public static void main(String[] args) throws IOException
{
AppConfig ac = new AppConfig();
ac.readApp();
}
}
配置文件(fffonfig.properties)的路径与Java源文件对应的.class的路径应该在同一个包下,运行结果如下:
param11param22
getResourceAsStream读取的文件路径只局限在工程的源文件夹中,包括在工程src根目录下,以及类包里面任何位置,但是如果配置文件路径是在除了源文件夹之外的其他文件夹中时,该方法是用不了的,会引起空指针异常。
使用枚举实现单例模式,单元素的枚举类型已经成为实现Singleton模式的最佳方法。代码如下:
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
enum AppConfig
{
ac;
private String paramA;
private String paramB;
public void readConfig()
{
Properties p =new Properties();
InputStream is = null;
is = AppConfig.class.getResourceAsStream("fffonfig.properties");
try
{
p.load(is);
this.paramA = p.getProperty("param1");
this.paramB = p.getProperty("param2");
} catch(IOException ie)
{
ie.printStackTrace();
}finally
{
try
{
is.close();
} catch(IOException ie)
{
ie.printStackTrace();
}
}
System.out.println(paramA+paramB);
}
}
public class SingleTest {
public static void main(String[] args) throws IOException
{
AppConfig.ac.readConfig();
}
}
运行结果:12
简单工厂的定义:提供一个创建对象实例的功能,而无需关心其具体实现。被创建实例的类型可以是接口,抽象类,也可以是具体的类。