for java beginner 17 配置文件的知识

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

}
}

-----------------------------------------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值