断网了……

烟灰学程序一年多了……总在想,要是断网了,我怎么学习……
烟灰就怕断网,断网了,就得完蛋……
 
 

常用链接

  • 我的随笔
  • 我的评论
  • 我参与的随笔

随笔分类(22)

  • Struts2.1学习(2) (rss)
  • Swing_UI开发进度(6) (rss)
  • 程序开发进度(14) (rss)

随笔档案(39)

  • 2010年2月 (2)
  • 2010年1月 (5)
  • 2009年12月 (1)
  • 2009年11月 (2)
  • 2009年8月 (2)
  • 2009年7月 (2)
  • 2009年6月 (2)
  • 2009年5月 (1)
  • 2009年4月 (1)
  • 2009年3月 (6)
  • 2009年2月 (11)
  • 2009年1月 (4)

相册

  • 程序图片

搜索

  •  

积分与排名

  • 积分 - 29180
  • 排名 - 179

最新评论

  • 1. re: windows server 2008 安装IIS7碰到的问题
  • 啊啊
  • --放
  • 2. re: 使用Filter进行非法访问拦截
  • 很久的帖子了,非法访问可以用spring来解决@毕业生
  • --烟灰这名字被人抢了……
  • 3. re: 使用Filter进行非法访问拦截
  • 评论内容较长,点击标题查看
  • --毕业生
  • 4. re: windows server 2008 安装IIS7碰到的问题
  • 你这个文章可是帮了我大忙啊......
  • --myskysoft
  • 5. re: Javascript Remote Object Invoker 6
  • 博主很强大!不错!
  • --不锈钢水箱
  • 6. re: Javascript Remote Object Invoker 6
  • 恭喜了,向你学习!
  • --海鲜池
  • 7. re: Javascript Remote Object Invoker 6
  • 是大家看法是打开
  • --凡客诚品官方网站
  • 8. re: Javascript Remote Object Invoker 2
  • 是空间看时间的方式将
  • --久久书城
  • 9. re: Javascript Remote Object Invoker 3
  • 是看见的开发时间地方
  • --凡客诚品官方网
  • 10. re: Javascript Remote Object Invoker 5
  • 阿萨就是大海的
  • --淘宝网减肥药

阅读排行榜

  • 1. 关于AlphaComposite的理解——Swing UI开发进度 (4932)
  • 2. (转)JDBC与JNDI应用比较(3007)
  • 3. 2009-2-6 再也再也不用JBuilder 搞开发了……(1597)
  • 4. 使用Filter进行非法访问拦截(1576)
  • 5. java LookAndFeel原理 ——Swing UI开发进度(1523)
  • 6. 为了好看,自己做!——Swing UI 开发进度(1344)
  • 7. windows server 2008 安装IIS7碰到的问题(1021)
  • 8. 说说LookAndFeel的工作流程——Swing UI开发进度 (956)
  • 9. 新的一个开始!——Swing UI开发进度 (864)
  • 10. Javascript Remote Object Invoker 3(769)

评论排行榜

  • 1. Javascript Remote Object Invoker 6(5)
  • 2. 使用Filter进行非法访问拦截(4)
  • 3. 关于AlphaComposite的理解——Swing UI开发进度 (3)
  • 4. 2009-2-1 今天开始更新,之后会不断更新 又是一个通宵……(2)
  • 5. 2009-2-6 再也再也不用JBuilder 搞开发了……(2)
  • 6. java LookAndFeel原理 ——Swing UI开发进度(2)
  • 7. 说说LookAndFeel的工作流程——Swing UI开发进度 (2)
  • 8. (转)JDBC与JNDI应用比较(2)
  • 9. windows server 2008 安装IIS7碰到的问题(2)
  • 10. Javascript Remote Object Invoker 5(2)

Powered by: 博客园
模板提供:沪江博客
IT博客 | 首页 | 发新随笔 | 发新文章 | 联系 | | 管理

MyEclipse 没安好心
MyEclipse确实提供了功能强大的插件,但是在UI编辑这一块,他还是不如IBM的WindowBuilder

但是MyEclipse的插件安装并没提供相应的选择

所以我不得不说MyEclipse没安好心
posted @ 2009-03-25 20:41 烟灰这名字被人抢了…… 阅读(364) | 评论 (0) | 编辑 收藏
 
配置文件读取器,在速度上进行了很多优化,但是依旧是全文读取解析模式
没什么好说的java版本,原理也没什么说头,下面是文件格式
[block name]
attribute_name=attribute_value

暂时只支持这种格式,和.ini文件是兼容的

下载地址
posted @ 2009-03-20 15:07 烟灰这名字被人抢了…… 阅读(201) | 评论 (0) | 编辑 收藏
 
JSP 自定义标签的优化
经过我的测试,发现jsp的自定义标签在容器中始终被优化过
当一个标签的属性一样时,只产生唯一一个对象与标签对应
<CSP:Button id="?" css="button">返回首页</CSP:Button>
<CSP:Button css="button">关于作者</CSP:Button>
<CSP:Button css="button">用户登陆</CSP:Button>
于是第二个和第三个标签生成的对象被优化了,成了唯一对象,然后结果就出问题了
<span id="?" class="button">
<a>返回首页</a>
</span>

<span class="button">
<a>关于作者</a>
</span>

<span class="button">
<a>关于作者</a>
</span>

当然我事先做了优化,内部产生代码时没有直接生成
使用了replace方法
之后看来不能这样做
private String startSpan = "<span@id@css>";
private String linkBlock = "<a@href>@body</a>";
private String endSpan = "</span>";

public void setBodyContent(BodyContent bodyContent) {
        
this.bodyContent = bodyContent;
        
if (bodyContent != null) {
            String text 
= bodyContent.getString();
            System.out.println(
this.hashCode());
            text 
= text.replaceAll("\n","");
            System.out.println(text);
            System.out.println();
            linkBlock 
= linkBlock.replaceAll("@body", text);
        }

        
else {
            linkBlock 
= linkBlock.replaceAll("@body", "");
        }

    }

于是就出现了上面的错误,确实是我的错,没经验导致的,不过这种优化可谓太新颖了,居然为了效率省略掉面向对象的原理
posted @ 2009-03-14 12:14 烟灰这名字被人抢了…… 阅读(283) | 评论 (0) | 编辑 收藏
 
Tomcat jsp页面书写乱码解决方案

凡事必须知其然并知其所以然,所以我决定先弄明白为什么出乱码
tomcat 使用的默认编码是 ISO-8859-1,所以必须注意一下,如果没对编码进行设置,那么tomcat都会使用这个编码
OK,我们来看看@page中的两个属性
contentType与pageEncoding:
前者用来给browser查看时所用的编码,所以在jsp页面中写
<meta http-equiv="Content-Type" content="text/html;charset=GB18030" />
就显得没有意义,但是如果我们没对contentType属性进行设置,则使用pageEncoding的编码方式
但让在contentType存在时,则使用该编码
所以,当你写了pageEncoding时完全可以不写contentType

后者,用于编译时使用,而response.getCharsetEncoding()获取的也是这个编码方式,这一点我是做个实验的
所以综上所述,只要你在jsp文件中写了<@page pageEncoding="gb2312">之流的东东,就绝对不会出乱码

posted @ 2009-03-12 13:19 烟灰这名字被人抢了…… 阅读(254) | 评论 (0) | 编辑 收藏
 
说说LookAndFeel的工作流程——Swing UI开发进度

看过前面文章就基本对LookAndFeel的工作有了一个初步了解
其中涉及java反射机制,其实也不是叫我们要怎么去用透这个东西,只是了解一个概念

通过java反射机制获得UI,这个不用我说了

研究JButton之后,我们看到一个UI的配置方式:

//我省略了部分代码的书写
public JButton(){
   
//这里为省略部分
   init(..);
}

public void init(..){//省略参数
    
//省略若干
    this.setUI(UIManager.getUI(this));
}

/* 
 * 然后UIManager调用
  * getUIDefaults().getUI(button)
 * 来生成UI
 * 然后getUI(button);中使用java反射获得UI值,具体
  * 还是看官自己看源码吧,牵涉的类太多,不好一一列出
  
*/

然后,在button的setUI方法中
调用了installUI这个方法

接下来就是你准备怎么去install了
比如我就写了一个setOpaque(false)将背景透明化

上一次的讲解说到了初始化LookAndFeel里UI的设置,其实不光是UI,我们所有的属性都可以在里面设置

具体怎么加载的,我还在研究,不过我清楚的知道了,如果你要写鼠标事件,请记得在你的installUI里设置一下b.setRolloverEnabled(true);//b是button对象
或者,你可以在LookAndFeel中的UIDefaults中进行设置,因为其中牵涉的内容比较多,算是比较复杂的了
我还在研究

——未完待续——
posted @ 2009-02-16 17:47 烟灰这名字被人抢了…… 阅读(956) | 评论 (2) | 编辑 收藏
 
java LookAndFeel原理 ——Swing UI开发进度
用一个专业化的说法就是java reflect,其实这里可以猜想,我们的JDBC驱动也应该是这样在工作
先给名字再在需要时加载,这也是java的神奇之处,C#没研究过,不清楚有没有反射机制,貌似我看到好像也有。
好了,闲话不扯了,这些都是题外话

java reflect做了什么?其中奥秘就在UIDefaults中,这个类继承自HashMap

我关注的是JDK帮助中的一个警告

警告:
此类的序列化对象与以后的 Swing 版本不兼容。当前序列化支持适用于短期存储,或适用于在运行相同 Swing 版本的应用程序之间进行 RMI(Remote Method Invocation,远程方法调用)。从 1.4 版本开始,已在 java.beans 包中添加了支持所有 JavaBeansTM 长期存储的功能。请参见 XMLEncoder。

这个警告说了什么。。。
也就是1.4之前已经有了这个类,我们不需要再重写这个类了,如果连这个类都要重写,那么代码量是惊人的
几乎重写了一套UI的事件+绘制,自己想想吧。


OK,简单说下LookAndFeel,这个东西很神奇,当你加载了一个外观时,这里面必须包含一个UIDefaults,这里包含了所有UI的细节,OK,我们做什么?把所有关于反射的参数设定好,利用put方法

例如:uiDefaults.put("PanelUI","com.ciash.swing.ui.DreamPanelUI");
这样你就有关于PanelUI的对应的类了,你的所有Panel都将去加载这个PanelUI。。。DreamPanelUI

但是,很关键的一点,你的PanelUI里必须有一个方法
public static ComponentUI createUI(JComponent c){
   //这里是你的静态UI
}
这个方法将利用java reflect调用,非常的恶心,没有接口,我也是看源代码才了解到的
后面的工作我还在继续,等有了新发现再写下吧

我准备把这东西拿到OpenSource上去

posted @ 2009-02-16 00:34 烟灰这名字被人抢了…… 阅读(1523) | 评论 (2) | 编辑 收藏
 
为了好看,自己做!——Swing UI 开发进度
关于swing的能力,如果是一个熟知java的人应该非常清楚
利用javax.swing.plaf包内里的接口可以做的事……


强大的LookAndFeel

目前完成的是无边框窗口,如上面图片中的窗口
按钮UI,如上图中的按钮
皮肤更换,其实就是一个XML文件,不断读取新的配置
点击换色也就repaint一下就ok,UI名不变,我们需要变的只是一个StyleSetting的设置
StyleSetting通过getInstance()方法获得颜色,当没有调用loadFromFile方法时,该类中的所有颜色配置都将是默认颜色
以灰调为主
这些颜色读取之后将改变
============================================================================
谁说swing不行?那是因为愚昧
当然,我们也可以用别人已经写好的LookAndFeel
但是,有什么比自己做更有趣呢?


现在还是半成品,我还是把JButton的基本属性给添加了,比如文本绘制、图标绘制

XML读取器,使用JDK1.6支持的dom读取方式

Swing_ui扩展包(Eclipse工程)
posted @ 2009-02-15 04:33 烟灰这名字被人抢了…… 阅读(1344) | 评论 (0) | 编辑 收藏
 
(转)走出行业暴利思维,开始为“软件”付钱!

走出行业暴利思维,开始为“软件”付钱!

赖勇浩(http://blog.csdn.ent/lanphaday)

今天早上,在 QQ 群里与朋友聊起配眼镜,有人说眼镜是暴利行业,“一个所谓的薄铁架,镀上一点不知是真是假的金属,然后卖个大几千”。这种看法是相当外行的,可以说是最普遍的对行业暴利的思维,没有考虑到行业的“软件”也是需要付钱的。以下整理自我在QQ群的聊天记录。

大部分中国人就那德性,不肯为“软件”付钱。

眼睛是人体最脆弱的部位,配眼镜是技术活,差之毫厘,谬以千里。可是却几乎没有客人有意识为这些技术出钱,只好把这些钱附加在眼镜价格上。

比如买镜片两百,但帮你打磨镜片收价五百,你肯出不?大部分人不肯的,所以只好说买镜片七百。

为什么在中国搞艺术的人大部分都过着猪狗不如的生活?因为他们生产的成本都是看不见,摸不着的,虽然事实上成本很大,但没有人肯多给点钱。更惨的是他们生产出来的东西,比如一幅画、一首歌,普通民众也难以说服自己为它们付出几千几百。

再比如,为什么你们接个软件界面图标之类的外包单子,客户只肯出几百几千?事实上你要工作上百个小时的活,生产出来的东西外行人一看,哇,就这几个 32*32 象素的图标算下来竟然要几十块一个,太TMD贵了!

不要用外行的眼光去评估别的行业,不要用衡量自己的标准去衡量别人。

朋友你不是说你懂程序嘛,程序员最讨厌的计算业绩的方式就是 LOC (lines of code代码行),为什么?因为这个指标就是一个纯外行的眼光,同一个问题,用十行代码解决往往比用一百行代码解决更难,甚至花费更多的时间,但如果用 LOC 指标,你写十行代码就是业绩不佳。

你也许看过这个故事:有个小女孩走路有点八字脚,她母亲带她去医院看专家门疹,挂号费一百;等了很久才轮到她们,专家一看,说:回去把左右鞋对调穿一下就好了。母亲气啊,一百块钱一句话,但这句话你觉得贵吗?还有一个故事是收费一万美元给坏了的机器画线的故事,那个老工程师说:画线收费一美元,知道在哪里画线收费 9999 美元。

人家这句话是专业,是知识,是无形的,最重要的是你要为这付钱。

不仅是知识是要付钱的,人脉也是,金钱也是,……也是

朋友又说“这个东西类似于房地产的概念,房子就是砖头与水泥,加上政府的地皮和请来的人工,然后就等着把人家辛苦十几年的钱一次性赚进来”。又外行了吧,在中国,人人都可以搞房地产,只要你拿得到地,有钱去买砖头和水泥,能够请到施工队。为什么你进不了这个行业,只能被动地接受他们的看似高价的商品房?原因就是他们要拿地皮是要成本的,你见过老总为了拿地喝到胃出血没有,你以为你买房的时候不该为他的健康买单?原因就是他们买砖头和水泥也是要先拿出金钱来的,难道你买房的时候不该为他拿出这么多钱出来盖房的风险买单?还有很多很多,在你看得到的,摸得着的东西里面,有无数的“软件”需要你付钱。

下次,记得给“软件”付钱~

end

posted @ 2009-02-09 23:56 烟灰这名字被人抢了…… 阅读(422) | 评论 (1) | 编辑 收藏
 
(转)JDBC与JNDI应用比较
JDBC与JNDI应用比较
JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB的知识。
那么,JNDI到底起什么作用?

要了解JNDI的作用,我们可以从“如果不用JNDI我们怎样做?用了JNDI后我们又将怎样做?”这个问题来探讨。

没有JNDI的做法:
程序员开发时,知道要开发访问MySQL数据库的应用,于是将一个对 MySQL JDBC 驱动程序类的引用进行了编码,并通过使用适当的 JDBC URL 连接到数据库。
就像以下代码这样:
Connection conn=null;
try {
Class.forName("com.mysql.jdbc.Driver",
true, Thread.currentThread().getContextClassLoader());
conn=DriverManager.getConnection("jdbc:mysql://MyDBServer?user=qingfeng&password=mingyue");

......
conn.close();
}
catch(Exception e) {
e.printStackTrace();
}
finally {
if(conn!=null) {
try {
conn.close();
} catch(SQLException e) {}
}
}

这是传统的做法,也是以前非Java程序员(如Delphi、VB等)常见的做法。这种做法一般在小规模的开发过程中不会产生问题,只要程序员熟悉Java语言、了解JDBC技术和MySQL,可以很快开发出相应的应用程序。

没有JNDI的做法存在的问题:
1、数据库服务器名称MyDBServer 、用户名和口令都可能需要改变,由此引发JDBC URL需要修改;
2、数据库可能改用别的产品,如改用DB2或者Oracle,引发JDBC驱动程序包和类名需要修改;
3、随着实际使用终端的增加,原配置的连接池参数可能需要调整;
4、......

解决办法:
程序员应该不需要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令 —— 甚至没有数据库池或连接管理。而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。

由此,就有了JNDI。

用了JNDI之后的做法:
首先,在在J2EE容器中配置JNDI参数,定义一个数据源,也就是JDBC引用参数,给这个数据源设置一个名称;然后,在程序中,通过数据源名称引用数据源从而访问后台数据库。
具体操作如下(以JBoss为例):
1、配置数据源
在JBoss 的 D:\jboss420GA\docs\examples\jca 文件夹下面,有很多不同数据库引用的数据源定义模板。将其中的 mysql-ds.xml 文件Copy到你使用的服务器下,如 D:\jboss420GA\server\default\deploy。
修改 mysql-ds.xml 文件的内容,使之能通过JDBC正确访问你的MySQL数据库,如下:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
    <jndi-name>
MySqlDS</jndi-name>
    <connection-url>
jdbc:mysql://localhost:3306/lw</connection-url>
    <driver-class>
com.mysql.jdbc.Driver</driver-class>
    <user-name>
root</user-name>
    <password>
rootpassword</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <metadata>
       <type-mapping>
mySQL</type-mapping>
    </metadata>
</local-tx-datasource>
</datasources>


这里,定义了一个名为MySqlDS的数据源,其参数包括JDBC的URL,驱动类名,用户名及密码等。

2、在程序中引用数据源:
Connection conn=null;
try {
Context ctx=new InitialContext();
Object datasourceRef=ctx.lookup("java:MySqlDS"); //引用数据源
DataSource ds=(Datasource)datasourceRef;
conn=ds.getConnection();

......
c.close();
}
catch(Exception e) {
e.printStackTrace();
}
finally {
if(conn!=null) {
try {
conn.close();
} catch(SQLException e) { }
}
}
直接使用JDBC或者通过JNDI引用数据源的编程代码量相差无几,但是现在的程序可以不用关心具体JDBC参数了。
在系统部署后,如果数据库的相关参数变更,只需要重新配置 mysql-ds.xml 修改其中的JDBC参数,只要保证数据源的名称不变,那么程序源代码就无需修改。

由此可见,JNDI避免了程序与数据库之间的紧耦合,使应用更加易于配置、易于部署。

JNDI的扩展:
JNDI在满足了数据源配置的要求的基础上,还进一步扩充了作用:所有与系统外部的资源的引用,都可以通过JNDI定义和引用。

所以,在J2EE规范中,J2EE 中的资源并不局限于 JDBC 数据源。引用的类型有很多,其中包括资源引用(已经讨论过)、环境实体和 EJB 引用。特别是 EJB 引用,它暴露了 JNDI 在 J2EE 中的另外一项关键角色:查找其他应用程序组件。

EJB 的 JNDI 引用非常类似于 JDBC 资源的引用。在服务趋于转换的环境中,这是一种很有效的方法。可以对应用程序架构中所得到的所有组件进行这类配置管理,从 EJB 组件到 JMS 队列和主题,再到简单配置字符串或其他对象,这可以降低随时间的推移服务变更所产生的维护成本,同时还可以简化部署,减少集成工作。外部资源”。


总结:
J2EE 规范要求所有 J2EE 容器都要提供 JNDI 规范的实现。JNDI 在 J2EE 中的角色就是“交换机” —— J2EE 组件在运行时间接地查找其他组件、资源或服务的通用机制。在多数情况下,提供 JNDI 供应者的容器可以充当有限的数据存储,这样管理员就可以设置应用程序的执行属性,并让其他应用程序引用这些属性(Java 管理扩展(Java Management Extensions,JMX)也可以用作这个目的)。JNDI 在 J2EE 应用程序中的主要角色就是提供间接层,这样组件就可以发现所需要的资源,而不用了解这些间接性。

在 J2EE 中,JNDI 是把 J2EE 应用程序合在一起的粘合剂,JNDI 提供的间接寻址允许跨企业交付可伸缩的、功能强大且很灵活的应用程序。这是 J2EE 的承诺,而且经过一些计划和预先考虑,这个承诺是完全可以实现的
posted @ 2009-02-07 22:43 烟灰这名字被人抢了…… 阅读(3007) | 评论 (2) | 编辑 收藏
 
properties

使用J2SE API读取Properties文件的六种方法

使用J2SE API读取Properties文件的六种方法

1。使用java.util.Properties类的load()方法
示例:
InputStream in = lnew BufferedInputStream(new FileInputStream(name));
Properties p = new Properties();
p.load(in);

2。使用java.util.ResourceBundle类的getBundle()方法
示例:
ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());

3。使用java.util.PropertyResourceBundle类的构造函数
示例:
InputStream in = new BufferedInputStream(new FileInputStream(name));
ResourceBundle rb = new PropertyResourceBundle(in);

4。使用class变量的getResourceAsStream()方法
示例:
InputStream in = JProperties.class.getResourceAsStream(name);
Properties p = new Properties();
p.load(in);

5。使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法
示例:
InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name);
Properties p = new Properties();
p.load(in);

6。使用java.lang.ClassLoader类的getSystemResourceAsStream()静态方法
示例:
InputStream in = ClassLoader.getSystemResourceAsStream(name);
Properties p = new Properties();
p.load(in);

补充

Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法
示例:
InputStream in = context.getResourceAsStream(path);
Properties p = new Properties();
p.load(in);

完整的示例,可以参考附件文件
如何上传文件,谁知道请告诉以下。 只好把source都贴上来了
JProperties.java文件

/**
** This program is free software.
**
** You may redistribute it and/or modify it under the terms of the GNU
** General Public License as published by the Free Software Foundation.
** Version 2 of the license should be included with this distribution in
** the file LICENSE, as well as License.html. If the license is not
** included with this distribution, you may find a copy at the FSF web
** site at 'www.gnu.org' or 'www.fsf.org', or you may write to the
** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA.
**
** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND,
** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR
** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY
** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR
** REDISTRIBUTION OF THIS SOFTWARE.
**/

package com.kindani;

//import javax.servlet.ServletContext;
import java.util.*;
import java.io.InputStream;
import java.io.IOException;
import java.io.BufferedInputStream;
import java.io.FileInputStream;

/**
* 使用J2SE API?取Properties文件的六?方法
* User: SYNFORM
* Date: 2005/07/12
* Time: 18:40:55
* To change this template use File | Settings | File Templates.
*/
public class JProperties {

public final static int BY_PROPERTIES = 1;
public final static int BY_RESOURCEBUNDLE = 2;
public final static int BY_PROPERTYRESOURCEBUNDLE = 3;
public final static int BY_CLASS = 4;
public final static int BY_CLASSLOADER = 5;
public final static int BY_SYSTEM_CLASSLOADER = 6;

public final static Properties loadProperties(final String name, final int type) throws IOException {
Properties p = new Properties();
InputStream in = null;
if (type == BY_PROPERTIES) {
in = new BufferedInputStream(new FileInputStream(name));
assert (in != null);
p.load(in);
} else if (type == BY_RESOURCEBUNDLE) {
ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault());
assert (rb != null);
p = new ResourceBundleAdapter(rb);
} else if (type == BY_PROPERTYRESOURCEBUNDLE) {
in = new BufferedInputStream(new FileInputStream(name));
assert (in != null);
ResourceBundle rb = new PropertyResourceBundle(in);
p = new ResourceBundleAdapter(rb);
} else if (type == BY_CLASS) {
assert (JProperties.class.equals(new JProperties().getClass()));
in = JProperties.class.getResourceAsStream(name);
assert (in != null);
p.load(in);
// return new JProperties().getClass().getResourceAsStream(name);
} else if (type == BY_CLASSLOADER) {
assert (JProperties.class.getClassLoader().equals(new JProperties().getClass().getClassLoader()));
in = JProperties.class.getClassLoader().getResourceAsStream(name);
assert (in != null);
p.load(in);
// return new JProperties().getClass().getClassLoader().getResourceAsStream(name);
} else if (type == BY_SYSTEM_CLASSLOADER) {
in = ClassLoader.getSystemResourceAsStream(name);
assert (in != null);
p.load(in);
}

if (in != null) {
in.close();
}
return p;

}

// ---------------------------------------------- servlet used
/*
public static Properties loadProperties(ServletContext context, String path) throws IOException {
assert (context != null);
InputStream in = context.getResourceAsStream(path);
assert (in != null);
Properties p = new Properties();
p.load(in);
in.close();
return p;
}
*/
posted @ 2009-02-07 22:34 烟灰这名字被人抢了…… 阅读(119) | 评论 (0) | 编辑 收藏
 
仅列出标题
共4页: 1 2 3 4