`
hubin4
  • 浏览: 92969 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

for java beginner 17 配置文件的知识

    博客分类:
  • JAVA
阅读更多
017 配置文件的知识

刚刚已经说到 配置文件,我说放 工程下,和src 兄弟
这时的目录结构是
D:\enhance
│  .project
│  .classpath
│  ★config.properties

├─src
│  └─com
│      └─ncs
│              Enum.java
│              Weekday.java
│              EnumDemo.java
│              EnumWithAbstractMethod.java
│              ReflectTest.java
│              Point.java
│              HasMainMethod.java
│              RunOtherClassMainMethod.java
│              ArrayReflct.java
│              ReflectInCollection.java
│              MyHashTest.java
│              ReadProperties.java

└─bin
    └─com
        └─ncs
                Enum.class
                Weekday.class
                Weekday$1.class
                Weekday$2.class
                EnumDemo.class
                EnumDemo$Month.class
                EnumWithAbstractMethod.class
                EnumWithAbstractMethod$TrafficLights.class
                EnumWithAbstractMethod$TrafficLights$3.class
                EnumWithAbstractMethod$TrafficLights$1.class
                EnumWithAbstractMethod$TrafficLights$2.class
                ReflectTest.class
                Point.class
                HasMainMethod.class
                RunOtherClassMainMethod.class
                ArrayReflct.class
                ReflectInCollection.class
                MyHashTest.class
                ReadProperties.class

我开发好了后,不可能把enhance整个目录给 客户,最多把bin目录打包给人家
★那么把配置文件放哪里呢???????????

我刚刚前一篇这样说过:
------------------
//介绍反射的好处
//比方说我不写死,写一个 米你 框架,接受用户在配置文件里写的类
//配置文件写在 工程目录底下,不是src下 和src兄弟级
public static void main(String[] args) throws Exception {
//load properties file
InputStream is = new FileInputStream("config.properties");
------------------
★其实不会这么做的
来看一下
C:\Documents and Settings\hubin>java MyClass xx.file
这里的xx.file 既不关系你的JAVA.EXE 也不关系你的MyClass这个类在哪里
而是和C:\Documents and Settings\hubin有关

然而你也可以到D盘去运行MyClass
这时又要在D盘下准备xx.file,显然不可行
如果写死
InputStream is = new FileInputStream("D:\\config.properties");
也不对的.

怎么办?????????
1,可以写一个 配置文件,告诉JVM,我把配置文件放哪里了,就是描述配置文件在哪里的配置文件

2,用类加载器
我们平时用的*.class文件怎么进JVM的呢???
既然 类加载器 可以把*.class文件从disk上加到JVM里
那么 加载 个配置文件也是顺手之劳了
具体看代码吧::
-----------------------------------------------
package com.ncs;

import java.io.InputStream;
import java.util.Collection;
import java.util.Properties;

public class ReadProperties {
	//介绍配置文件放哪里了
	public static void main(String[] args) throws Exception {
		//要run这个APP,ReadProperties肯定要进JVM吧
		//可以从这个类开刀,找到类加载器,然后 类加载器 在classpath下 一个个去找 
		InputStream is =ReadProperties.class.getClassLoader().getResourceAsStream("com/ncs/config.properties");
		//注意没有 / 打头
		//现在好了,只是这方式不可以写,只读的,
		
		//很多很多的框架的配置文件都用这种方式的,所以都不啊配置文件放classpath下的
		
		//可以在ECLIPSE的src下放一个,IDE会自己给你创建一个在 bin下,最里面,写名字要写包名com/ncs/config.properties
		//不要自己去放,会被ECLIPSE删掉的,要在IDE里放
		
		InputStream is2 = ReadProperties.class.getResourceAsStream("config.properties");
		//上面这行就更简单了,包名也可以不要了,ReadProperties 和 config.properties同名
		
		//也可以加 /  加了就是说从 根开始找 一层一层包名要写全了
		
		//把配置文件放中间会怎么样呢?
		//好象没有中间,都放src下,也就是直接在src下一层就有了[我的程序]
		
		Properties properties = new Properties();
		properties.load(is);
		is.close();
		
		String className = properties.getProperty("className");//良好的命名习惯
		
		//Collection collection = new ArrayList(); 现在不用写死了
		Collection collection = (Collection)Class.forName(className).newInstance();
		String test = "hubin";
		collection.add(test);
		collection.add(test);
		collection.add(test);
		
		System.out.println(collection.size()); //3 因为在培植文件里是ArrayList
		//System.out.println(collection.size()); //1 因为在培植文件里是java.util.HashSet
		
	}
}

-----------------------------------------------------
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics