﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-bitbit</title><link>http://www.blogjava.net/bitbit/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 17 Apr 2026 22:39:55 GMT</lastBuildDate><pubDate>Fri, 17 Apr 2026 22:39:55 GMT</pubDate><ttl>60</ttl><item><title>Java 6 JVM参数选项大全（中文版）</title><link>http://www.blogjava.net/bitbit/archive/2009/11/30/304247.html</link><dc:creator>bt,bt.bt</dc:creator><author>bt,bt.bt</author><pubDate>Mon, 30 Nov 2009 05:27:00 GMT</pubDate><guid>http://www.blogjava.net/bitbit/archive/2009/11/30/304247.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文是基于最新的SUN官方文档Java SE 6 Hotspot VM Options&nbsp;编写的译文。主要介绍JVM中的非稳态选项及其使用说明。为了让读者明白每个选项的含义，作者在原文基础上补充了大量的资料。因为是初稿，如有描述错误，敬请指正。&nbsp;非稳态选项使用说明-XX:+&lt;option&gt;&nbsp;启用option-XX:-&lt;optio...&nbsp;&nbsp;<a href='http://www.blogjava.net/bitbit/archive/2009/11/30/304247.html'>阅读全文</a><img src ="http://www.blogjava.net/bitbit/aggbug/304247.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bitbit/" target="_blank">bt,bt.bt</a> 2009-11-30 13:27 <a href="http://www.blogjava.net/bitbit/archive/2009/11/30/304247.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java资源获取分析</title><link>http://www.blogjava.net/bitbit/archive/2009/11/27/303911.html</link><dc:creator>bt,bt.bt</dc:creator><author>bt,bt.bt</author><pubDate>Fri, 27 Nov 2009 08:33:00 GMT</pubDate><guid>http://www.blogjava.net/bitbit/archive/2009/11/27/303911.html</guid><description><![CDATA[<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 18px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px" class="Apple-style-span">在开发java程序的过程中，我们经常要做的一件事就是获取资源。那么什么是资源呢？说白了，在计算机里那就是一堆数据。只是这堆数据对我们的java程序有多种表现形式，一般来说有File，URL，InputStream等等。而单就文件这一项就有很多种：配置文件，java类文件，jps文件，图片、css、js文件等等。面对这林林总总的资源，我们在设计一个读取资源的接口时，就需要针对不同形式的资源提供方法，这样就导致我们的接口还是与实际的资源形式绑定在一起，未能完全的抽象。另外，在java程序中资源的存放位置也是各异的。有的存放在classpath中，有的存放在文件系统中，有的存放在web应用中。而对于不同位置的资源，java程序获取这些资源的方法各有不同。<span class="Apple-converted-space">&nbsp;</span><br />
A、获取classpath中的资源：<span class="Apple-converted-space">&nbsp;</span><br />
Java代码<span class="Apple-converted-space">&nbsp;</span><br />
URL url = this.getClass().getResource("resource_name");&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
URL url = this.getClass().getClassLoader().getResource("resource_name");&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
URL url = Thread.currentThread().getContextClassLoader().getResource("resource_name");&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
甜性涩爱下载<span class="Apple-converted-space">&nbsp;</span><a style="color: rgb(0,102,0); text-decoration: underline" href="http://www.bt285.cn/content.php?id=1196863" target="_blank">http://www.bt285.cn/content.php?id=1196863</a><span class="Apple-converted-space">&nbsp;</span><br />
那么在jdk中为什么又提供了三种方式来获取classpath下的资源呢？这其中是有些来头的。<span class="Apple-converted-space">&nbsp;</span><br />
第一行代码中是利用Class类的实例来获取，第二行代码是使用加载当前类的classloader来获取。看下jdk中的源代码会发现class类的实例最后还是委托加载他的classloader来获取资源的。<span class="Apple-converted-space">&nbsp;</span><br />
Java代码<span class="Apple-converted-space">&nbsp;</span><br />
/**<span class="Apple-converted-space">&nbsp;</span><br />
* 色即是空2下载&nbsp;<span class="Apple-converted-space">&nbsp;</span><a style="color: rgb(0,102,0); text-decoration: underline" href="http://www.bt285.cn/sejishikong/" target="_blank">http://www.bt285.cn/sejishikong/</a><span class="Apple-converted-space">&nbsp;</span><br />
爱的色放下载<span class="Apple-converted-space">&nbsp;</span><a style="color: rgb(0,102,0); text-decoration: underline" href="http://www.bt285.cn/aidesefang/" target="_blank">http://www.bt285.cn/aidesefang/</a><span class="Apple-converted-space">&nbsp;</span><br />
*/<span class="Apple-converted-space">&nbsp;</span><br />
public java.net.URL getResource(String name) {&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
&nbsp;&nbsp;&nbsp; name = resolveName(name);&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
&nbsp;&nbsp;&nbsp; ClassLoader cl = getClassLoader0();&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
&nbsp;&nbsp;&nbsp; if (cl==null) {&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // A system class.&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return ClassLoader.getSystemResource(name);&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
&nbsp;&nbsp;&nbsp; }&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
&nbsp;&nbsp;&nbsp; return cl.getResource(name);&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
}&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
<br />
从上面的代码中可以看出，对于资源的加载并没有像类加载所采用的双亲委托机制。而是当前类的classloader不为null的情况下先从当前类的classloader中加载资源。而只有当前类的classloader为null的时候才从system classloader中去加载资源。这样可以方便我们自定义配置类覆盖一些默认配置。当然，j2se应用中如果没有特别定制classloader时，我们自己写的类都是被system classloader加载的。到底利用class去获取资源和利用classloader去获取资源有什么区别呢？区别就在 resolveName(name)这个方法中。两种方式对于资源名称的表示方式不同。下面是一个简单的包结构，/表示类路径的根<span class="Apple-converted-space">&nbsp;</span><br />
/<span class="Apple-converted-space">&nbsp;</span><br />
|-com.cn.test<span class="Apple-converted-space">&nbsp;</span><br />
&nbsp;&nbsp; |-Test.class<span class="Apple-converted-space">&nbsp;</span><br />
&nbsp;&nbsp; |-test2.txt&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
|-test1.txt<span class="Apple-converted-space">&nbsp;</span><br />
Java代码<span class="Apple-converted-space">&nbsp;</span><br />
// 获取与当前类在同一个包下的资源&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
URL url1 = this.getClass().getResource("test2.txt");&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
// 获取com.cn.test包下的资源,需加/&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
URL url2 = this.getClass().getResource("/com/cn/test/test2.txt");&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
// 获取类路径根下的资源&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
URL url3 = this.getClass().getClassLoader().getResource("test1.txt");&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
// 获取包com.cn.test包下的资源&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
URL url4 = this.getClass().getResource("com/cn/test/test2.txt");&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
<br />
而第三利用当前线程的contextClassLoader来获取资源的解释可以参考我的另一篇<span class="Apple-converted-space">&nbsp;</span><br />
B、获取文件系统中的资源<span class="Apple-converted-space">&nbsp;</span><br />
Java代码<span class="Apple-converted-space">&nbsp;</span><br />
// 1、获得File对象&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
File file = new File("test.txt");&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
// 2、获得File对象的字节流&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
InputStream in = new FileInputStream(file);&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
<br />
值得注意的是在File的构造函数File(String name) 中的name参数可以是相对路径和绝对路径。相对路径是相对于System.getProperties("user.dir")的。<span class="Apple-converted-space">&nbsp;</span><br />
C、获取web应用中的资源<span class="Apple-converted-space">&nbsp;</span><br />
Java代码<span class="Apple-converted-space">&nbsp;</span><br />
servletContext.getResourceAsStream(resource_name);&nbsp;<span class="Apple-converted-space">&nbsp;</span><br />
<br />
resource_names为相对于webroot的路径表示。例如获取web.xml，resource_name表示为"/WEB-INF/web.xml"<span class="Apple-converted-space">&nbsp;</span><br />
<br />
&nbsp;&nbsp;&nbsp; 面对上面介绍的各种资源表现形式和存放位置，难道java中就没有提供一个统一处理方式吗？有，java.net.URL。<span class="Apple-converted-space">&nbsp;</span><br />
从名称上来看 URL(Uniform Resource Locator) 统一资源定位器。看起来很好很强大。但很多时候使用它并不能定位到我们需要的资源。<span class="Apple-converted-space">&nbsp;</span><br />
&nbsp;&nbsp;&nbsp; 首先，它jdk中体统的URL能访问的协议非常有限（当然可以进行扩展，不过很麻烦）；常用的有http,file,ftp等等。并没有提供对classpath和servletContext中的资源的获取方法。<span class="Apple-converted-space">&nbsp;</span><br />
&nbsp;&nbsp;&nbsp; 另外，它没有提供判断资源是否存在的方法。每次只有等我们真正去获取资源的时候抛出异常才能知道资源无法获取。<span class="Apple-converted-space">&nbsp;</span><br />
&nbsp;&nbsp;&nbsp; 其次，URL这个类的职责未划分清楚，既用来表示资源有用来获取其资源。<span class="Apple-converted-space">&nbsp;</span></span></span>
<img src ="http://www.blogjava.net/bitbit/aggbug/303911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/bitbit/" target="_blank">bt,bt.bt</a> 2009-11-27 16:33 <a href="http://www.blogjava.net/bitbit/archive/2009/11/27/303911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>