??xml version="1.0" encoding="utf-8" standalone="yes"?>黄色一区三区,在线精品视频免费播放,宅男网站在线免费观看http://www.aygfsteel.com/jdo/category/24570.htmlzh-cnWed, 19 Dec 2007 01:07:26 GMTWed, 19 Dec 2007 01:07:26 GMT60Java数字、货币值和癑ֈ数等的格式化处理http://www.aygfsteel.com/jdo/articles/168621.html蓝色q默蓝色q默Tue, 18 Dec 2007 16:15:00 GMThttp://www.aygfsteel.com/jdo/articles/168621.htmlhttp://www.aygfsteel.com/jdo/comments/168621.htmlhttp://www.aygfsteel.com/jdo/articles/168621.html#Feedback0http://www.aygfsteel.com/jdo/comments/commentRss/168621.htmlhttp://www.aygfsteel.com/jdo/services/trackbacks/168621.html


----------------------------------------

System.out.println(123456.789);

----------------------------------------

会在Console看到输出

----------------------------------------

123456.789

----------------------------------------

那么如何得到?23Q?56.789”这U格式化的输出呢Q?

q里需要用到java.text.Formatq个cR?

不仅是数字,它还提供了货币值和癑ֈ数的格式化输出,例如0.58的百分数输出形式?8%?

要获得本地的默认格式Q可以用下列Ҏ(gu)获得Q?

NumberFormat.getNumberInstance()
NumberFormat.getCurrencyInstance()
NumberFormat.getOpercentInstance()

而要获得某个国家或地区的具体格式Q可以用参数Local.XXX。例如,Local.GERMANYQLocal.UK?

范例Q?

---------------------------------------------------------------

import java.text.NumberFormat;
import java.util.Locale;

public class FormatTest{
    public static void main(String args[]){ 

        //不用格式化输出敊W?br />          double d = 10000.0/3.0;
        System.out.println("无格式化输出Q? + d);

        //使用本地默认格式输出?
          NumberFormat numberFormat = NumberFormat.getNumberInstanc();
        //numberFormat.setMaximumFractionDigits(4); 
        //numberFormat.setMinimumIntegerDigits(6);
        String numberString = numberFormat.format(d);
        System.out.println("本地默认格式输出敎ͼ" + numberString);

       //使用本地默认格式输出货币?
         NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
       System.out.println("本地默认格式输出货币|" + currencyFormat.format(d));

       //使用本地默认格式输出癑ֈ?
         NumberFormat percentFormat = NumberFormat.getPercentInstance();
       System.out.println("本地默认格式输出癑ֈ敎ͼ" + percentFormat.format(d)); 

      //在不同的国家各地区数字表C的格式也有区别。例如d?
          //使用德国的格式化输出?
            NumberFormat numberFormatG = NumberFormat.getNumberInstance(Local.GERMANY);
          System.out.println("德国数字输出形式Q? + numberFormatG.format(d));

         //使用德国货币输出形式
           NumberFormat currencyFormatG = NumberFormat.getCurrencyInstance(Local.GERMANY);
         System.out.println("德国货币输出形式Q? + currencyFormatG.format(d));

         //使用国货币输出形式
           NumberFormat currencyFormatA = NumberFormat.getCurrencyInstance(Local.US);
         System.out.println("国货币输出形式Q? + currencyFormatG.format(d)); 
       
         //使用德国癑ֈ数输出Ş式?br />           NumberFormat percentFormatG = NumberFormat.getPercentInstance(Local.GERMANY);
         System.out.println("德国癑ֈ数输出Ş式:" + percentFormatG .format(d));

         System.exit(0);
     }
 }
 
---------------------------------------------------------------------------------

E序输出

---------------------------------------

<!--[if !vml]--><!--[endif]-->

---------------------------------------

׃Ƨ元W号无法在此Console输出Q所以显C?

可以指定昄的最多(或最)整数位和数位。如

---------------------------------------

double d = 10000.0/3.0;
NumberFormat numberFormat = NumberFormat.getNumberInstance();
numberFormat.setMaximumFractionDigits(4);
numberFormat.setMinimumIntegerDigits(6);
String numberString = numberFormat.format(d);
System.out.println(numberString);
 
---------------------------------------

输出Q?

---------------------------------------

003Q?33.3333

---------------------------------------

整数位不够的补零Q小数截去部分四舍五入?

也可以利用NumberFormat的一个子cDecimalFormat来指定输出格式?

---------------------------------------

DecimalFormat decimalFormat = new DecimalFormat("######.0000");
String s = decimalFormat.format(d);

---------------------------------------

和前面一P昄6个整C?个小C?

下面Ҏ(gu)式化的数字进行解析?

---------------------------------------

import java.util.Locale;
import java.text.NumberFormat;
import java.text.ParseException;

public class ParseFormat{
    public static void main(String args[]){

        //本地格式的解?
          NumberFormat numberFormat1 = NumberFormat.getNumberInstance(); 
       Number numb1 = null;

       try
      {
           numb1 = numberFormat1.parse("33,333.33");
       }
       catch(ParseException e1)
      {
           System.err.println(e1);
      }
      System.out.println(number1);

      //以d国格式解析?br />        NumberFormat numberFormat2 = NumberFormat.getNumberInstance(Locale.GERMANY);
        Number numb2 = null; 
 
        try
       {
            numb2 = numberFormat2.parse("33,333.33");
       }
       catch(ParseException e2)
       {
            System.err.println(e2);
       }
       System.out.println(number2);

       System.exit(0);
    }
}
 
---------------------------------

E序输出Q?

---------------------------------

33333.33 33.333
 
--------------------------------
 
同样一U格?3,333.33Q有人将之理解ؓ33333.33Q也有h认ؓ它是33.333QY件国际化的重要性可见一斑?



蓝色q默 2007-12-19 00:15 发表评论
]]>
BMP文g格式分析http://www.aygfsteel.com/jdo/articles/146989.html蓝色q默蓝色q默Fri, 21 Sep 2007 02:09:00 GMThttp://www.aygfsteel.com/jdo/articles/146989.htmlhttp://www.aygfsteel.com/jdo/comments/146989.htmlhttp://www.aygfsteel.com/jdo/articles/146989.html#Feedback1http://www.aygfsteel.com/jdo/comments/commentRss/146989.htmlhttp://www.aygfsteel.com/jdo/services/trackbacks/146989.html 本来不想写这东西,因ؓ介绍BMP文gl构的资料太多了Q都有些滥了。但刚写完BMP的读写模块,又不想不留下点什么,所以就写了Q全当是学习(fn)W记吧。自׃后查资料时也方便一些,也许Ҏ(gu)些初哥还会有点用^_^

?/p>

BMP(Bitmap-File) 囑Ş文g是Windows采用的图形文件格式,在Windows环境下运行的所有图象处理Y仉支持BMP图象文g格式。Windowspȝ内部各图像绘 制操作都是以BMP为基的。Windows 3.0以前的BMP图文件格式与昄讑֤有关Q因此把q种BMP图象文g格式UCؓ讑֤相关位图DDB(device-dependent bitmap)文g格式。Windows 3.0以后的BMP图象文g与显C备无养I因此把这UBMP图象文g格式UCؓ讑֤无关位图DIB(device-independent bitmap) 格式Q注QWindows 3.0以后Q在pȝ中仍然存在DDB位图Q象BitBlt()q种函数是ZDDB位图的,只不q如果你惛_囑փ以BMP格式保存到磁盘文件中Ӟ微Y 极力推荐你以DIB格式保存Q,目的是ؓ了让Windows能够在Q何类型的昄讑֤上显C所存储的图象。BMP位图文g默认的文件扩展名是BMP或? bmpQ有时它也会?DIB?RLE作扩展名Q?

6.1.2 文gl构

位图文g可看成由4个部分组成:位图文g?bitmap-file header)、位图信息头(bitmap-information header)、彩色表(color table)和定义位囄字节阵列Q它h如下所C的形式?

位图文g的组?/font>

l构名称

W号

位图文g?bitmap-file header) BITMAPFILEHEADER bmfh
位图信息?bitmap-information header) BITMAPINFOHEADER bmih
彩色?color table) RGBQUAD aColors[]
图象数据阵列字节 BYTE aBitmapBits[]

位图文gl构可综合在?-01中?

?1 位图文gl构内容摘要

 

偏移?/font>

域的名称

大小

内容

 

 

 

图象文g

?/font>

0000h 文g标识 2 bytes 两字节的内容用来识别位图的类型:

‘BM?Q?Windows 3.1x, 95, NT, ?/font>

‘BA?QOS/2 Bitmap Array

‘CI?QOS/2 Color Icon

‘CP?QOS/2 Color Pointer

‘I(y)C?Q?OS/2 Icon

‘PT?QOS/2 Pointer

注:因ؓOS/2pȝq没有被普及开Q所以在~程Ӟ你只需判断W一个标识“BM”就行?/font>

  0002h File Size 1 dword 用字节表C的整个文g的大?/font>
  0006h Reserved 1 dword 保留Q必设|ؓ0
  000Ah Bitmap Data Offset 1 dword 从文件开始到位图数据开始之间的数据(bitmap data)之间的偏U量
  000Eh Bitmap Header Size 1 dword 位图信息?Bitmap Info Header)的长度,用来描述位图的颜艌Ӏ压~方法等。下面的长度表示Q?/font>

28h - Windows 3.1x, 95, NT, ?/font>

0Ch - OS/2 1.x

F0h - OS/2 2.x

注: 在Windows95?8?000{操作系l中Q位图信息头的长度ƈ不一定是28hQ因为微软已l制定出了新的BMP文g格式Q其中的信息头结构变? 比较大,长度加长。所以最好不要直接用常?8hQ而是应该从具体的文g中读取这个倹{这h能确保程序的兼容性?/font>

  0012h Width 1 dword 位图的宽度,以象素ؓ单位
  0016h Height 1 dword 位图的高度,以象素ؓ单位
  001Ah Planes 1 word 位图的位面数Q注Q该值将L1Q?/font>

图象

信息

?/font>

 

 

001Ch Bits Per Pixel 1 word 每个象素的位?/font>

1 - 单色位图Q实际上可有两种颜色Q缺省情况下是黑色和白色。你可以自己定义q两U颜Ԍ

4 - 16 色位?/font>

8 - 256 色位?/font>

16 - 16bit 高彩色位?/font>

24 - 24bit 真彩色位?/font>

32 - 32bit 增强型真彩色位图

  001Eh Compression 1 dword 压羃说明Q?/font>

0 - 不压~?(使用BI_RGB表示)

1 - RLE 8-使用8位RLE压羃方式(用BI_RLE8表示)

2 - RLE 4-使用4位RLE压羃方式(用BI_RLE4表示)

3 - Bitfields-位域存放方式(用BI_BITFIELDS表示)

  0022h Bitmap Data Size 1 dword 用字节数表示的位图数据的大小。该数必L4的倍数
  0026h HResolution 1 dword 用象?cC的水^分L?/font>
  002Ah VResolution 1 dword 用象?cC的垂直分L?/font>
  002Eh Colors 1 dword 位图使用的颜色数。如8-比特/象素表示?00h或?256.
  0032h Important Colors 1 dword 指定重要的颜色数。当该域的值等于颜色数Ӟ或者等?ӞQ表C所有颜色都一样重?/font>
调色板数?/font> Ҏ(gu)BMP版本的不同而不?/font> Palette N * 4 byte 调色板规范。对于调色板中的每个表项Q这4个字节用下述Ҏ(gu)来描qRGB的|
1字节用于蓝色分量
1字节用于l色分量
1字节用于U色分量
1字节用于填充W?讄?)
图象数据 Ҏ(gu)BMP版本及调色板寸的不同而不?/font> Bitmap Data xxx bytes 该域的大取决于压羃Ҏ(gu)及图像的寸和图像的位深度,它包含所有的位图数据字节Q这些数据可能是彩色调色板的索引P也可能是实际的RGB|q将Ҏ(gu)囑փ信息头中的位深度值来军_?/font>




构g详解

1. 位图文g?/font>

位图文g头包含有关于文gcd、文件大、存放位|等信息Q在Windows 3.0以上版本的位图文件中用BITMAPFILEHEADERl构来定义:

typedef struct tagBITMAPFILEHEADER { /* bmfh */

UINT bfType;
DWORD bfSize;
UINT bfReserved1;
UINT bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;

 

其中Q?/font>
 

bfType

说明文g的类?Q该值必需?x4D42Q也是字符'BM'。我们不需要判断OS/2的位图标识,q么做现在来看似乎已l没有什么意义了Q而且如果要支持OS/2的位图,E序变得很J琐。所以,在此只徏议你?BM'标识Q?/p>

bfSize

说明文g的大,用字节ؓ单位

bfReserved1

保留Q必设|ؓ0

bfReserved2

保留Q必设|ؓ0

bfOffBits

说明从文件头开始到实际的图象数据之间的字节的偏U量。这个参数是非常有用的,因ؓ位图信息头和调色板的长度会根据不同情况而变化,所以你可以用这个偏UdD速的从文件中dC数据?/p>

2. 位图信息?/strong>

? 图信息用BITMAPINFOl构来定义,它由位图信息?bitmap-information header)和彩色表(color table)l成Q前者用BITMAPINFOHEADERl构定义Q后者用RGBQUADl构定义。BITMAPINFOl构h如下形式Q?/font>

typedef struct tagBITMAPINFO { /* bmi */

BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;

 

其中Q?/font>
 

bmiHeader

说明BITMAPINFOHEADERl构Q其中包含了有关位图的尺寸及位格式等信息

bmiColors

说明彩色表RGBQUADl构的阵列,其中包含索引囑փ的真实RGB倹{?/p>

BITMAPINFOHEADERl构包含有位图文件的大小、压~类型和颜色格式Q其l构定义为:

typedef struct tagBITMAPINFOHEADER { /* bmih */

DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;

 

其中Q?/font>
 

biSize

? 明BITMAPINFOHEADERl构所需要的字数。注Q这个值ƈ不一定是BITMAPINFOHEADERl构的尺寸,它也可能是sizeof (BITMAPV4HEADER)的|或是sizeof(BITMAPV5HEADER)的倹{这要根据该位图文g的格式版本来军_Q不q,q在的? 冉|看,l大多数的BMP囑փ都是BITMAPINFOHEADERl构的(可能是后两者太新的~故?-Q?/p>

biWidth

说明图象的宽度,以象素ؓ单位

biHeight

? 明图象的高度Q以象素为单位。注Q这个值除了用于描q图像的高度之外Q它q有另一个用处,是指明该图像是倒向的位图,q是正向的位图。如果该值是一个正 敎ͼ说明囑փ是倒向的,如果该值是一个负敎ͼ则说明图像是正向的。大多数的BMP文g都是倒向的位图,也就是时Q高度值是一个正数。(注:当高度值是一? 负数Ӟ正向囑փQ,囑փ不能被压羃Q也是说biCompression成员不能是BI_RLE8或BI_RLE4Q?/p>

biPlanes

为目标设备说明位面数Q其值将L被设?

biBitCount

说明比特?象素Q其gؓ1???6?4、或32

biCompression

说明图象数据压羃的类型。其值可以是下述g一Q?/font>
BI_RGBQ没有压~;
BI_RLE8Q每个象?比特的RLE压羃~码Q压~格式由2字节l成(重复象素计数和颜色烦?Q?
BI_RLE4Q每个象?比特的RLE压羃~码Q压~格式由2字节l成
BI_BITFIELDSQ每个象素的比特由指定的掩码军_?br />

biSizeImage

说明图象的大,以字节ؓ单位。当用BI_RGB格式Ӟ可设|ؓ0

biXPelsPerMeter

说明水^分L率,用象?cC?/font>

biYPelsPerMeter

说明垂直分L率,用象?cC?/font>

biClrUsed

说明位图实际使用的彩色表中的颜色索引敎ͼ设ؓ0的话Q则说明使用所有调色板)

biClrImportant

说明对图象显C有重要影响的颜色烦引的数目Q如果是0Q表C都重要?/p>

现就BITMAPINFOHEADERl构作如下说明:

(1) 彩色表的定位

应用E序可用存储在biSize成员中的信息来查扑֜BITMAPINFOl构中的彩色表,如下所C:

pColor = ((LPSTR) pBitmapInfo + (WORD) (pBitmapInfo->bmiHeader.biSize))

(2) biBitCount

biBitCount=1 表示位图最多有两种颜色Q缺省情况下是黑色和白色Q你也可以自己定义这两种颜色。图像信息头装调色板中将有两个调色板,UCؓ索引0和烦?。图象数据阵列中的每一位表CZ个象素。如果一个位?Q显C时׃用烦?的RGB|如果位是1Q则使用索引1的RGB倹{?/font>

biBitCount=4 ? CZ图最多有16U颜艌Ӏ每个象素用4位表C,q用q?位作为彩色表的表Ҏ(gu)查找该象素的颜色。例如,如果位图中的W一个字节ؓ0x1FQ它表示有两个象 素,W一象素的颜色就在彩色表的第2表项中查找,而第二个象素的颜色就在彩色表的第16表项中查找。此Ӟ调色板中~省情况下会?6个RGBV对应于 索引0到烦?5?/font>

biBitCount=8 表示位图最多有256U颜艌Ӏ每个象素用8位表C,q用q?位作为彩色表的表Ҏ(gu)查找该象素的颜色。例如,如果位图中的W一个字节ؓ0x1FQ这个象素的颜色在彩色表的W?2表项中查找。此Ӟ~省情况下,调色板中会有256个RGB,对应于烦?到烦?55?/font>

biBitCount=16 表示位图最多有216U? 颜色。每个色素用16位(2个字节)表示。这U格式叫作高彩色Q或叫增强型16位色Q或64K艌Ӏ它的情冉|较复杂,当biCompression成员? 值是BI_RGBӞ它没有调色板?6位中Q最低的5位表C色分量,中间?位表C绿色分量,高的5位表C红色分量,一共占用了15位,最高的一位保 留,设ؓ0。这U格式也被称?55 16位位图。如果biCompression成员的值是BI_BITFIELDSQ那么情况就复杂了,首先是原来调色板的位|被三个DWORD变量占据Q? UCؓU、绿、蓝掩码。分别用于描q红、绿、蓝分量?6位中所占的位置。在Windows 95Q或98Q中Q系l可接受两种格式的位域:555?65Q在555格式下,U、绿、蓝的掩码分别是Q?x7C00?x03E0?x001FQ? ?65格式下,它们则分别ؓQ?xF800?x07E0?x001F。你在读取一个像素之后,可以分别用掩码“与”上像素|从而提取出惌的颜? 分量Q当然还要再l过适当的左右移操作Q。在NTpȝ中,则没有格式限Ӟ只不q要求掩码之间不能有重叠。(注:q种格式的图像用v来是比较ȝ的,? q因为它的显C效果接q于真彩Q而图像数据又比真彩图像小的多Q所以,它更多的被用于游戏YӞ?/font>

biBitCount=24 表示位图最多有224U颜艌Ӏ这U位图没有调色板QbmiColors成员寸?Q,在位数组中,?个字节代表一个象素,分别对应于颜色R、G、B?/font>

biBitCount=32 表示位图最多有232U? 颜色。这U位囄l构?6位位囄构非常类|当biCompression成员的值是BI_RGBӞ它也没有调色板,32位中?4位用于存? RGB|序是:最高位—保留,U?位、绿8位、蓝8位。这U格式也被成?88 32位图。如? biCompression成员的值是BI_BITFIELDSӞ原来调色板的位置被三个DWORD变量占据Q成为红、绿、蓝掩码Q分别用于描q红? lѝ蓝分量?2位中所占的位置。在Windows 95(or 98)中,pȝ只接?88格式Q也是说三个掩码的值将只能是:0xFF0000?xFF00?xFF。而在NTpȝ中,你只要注意掩码之间不 生重叠就行。(注:q种囑փ格式比较规整Q因为它是DWORD寚w的,所以在内存中进行图像处理时可进行汇~的代码优化(单)Q?/font>

(3) ClrUsed

BITMAPINFOHEADER l构中的成员ClrUsed指定实际使用的颜色数目。如果ClrUsed讄?Q位图用的颜色数目q于biBitCount成员中的数目。请注意Q? 如果ClrUsed的g是可用颜色的最大值或不是0Q则在编E时应该注意调色板尺寸的计算Q比如在4位位图中Q调色板的缺省尺寸应该是 16Qsizeof(RGBQUAD)Q但是,如果ClrUsed的g?6或者不?Q那么调色板的尺寸就应该是ClrUsedQsizeof (RGBQUAD)?/font>

(4) 图象数据压羃

?BI_RLE8Q?/strong>每个象素?比特的RLE压羃~码Q可使用~码方式和绝Ҏ(gu)式中的Q何一U进行压~,q两U方式可在同一q图中的M地方使用?/font>

~码方式Q由2个字节组成,W一个字节指定用相同颜色的象素数目Q第二个字节指定使用的颜色烦引。此外,q个字节对中的第一个字节可讄?Q联合用第二个字节的DC:

W二个字节的gؓ0Q行的结束?
W二个字节的gؓ1Q图象结束?
W二个字节的gؓ2Q其后的两个字节表示下一个象素从当前开始的水^和垂直位|的偏移量?

l对方式Q? W一个字节设|ؓ0Q而第二个字节讄?x03?xFF之间的一个倹{在q种方式中,W二个字节表C在这个字节后面的字节敎ͼ每个字节包含单个象素 的颜色烦引。压~数据格式需要字边界(word boundary)寚w。下面的例子是用16q制表示?-位压~图象数据:

03 04 05 06 00 03 45 56 67 00 02 78 00 02 05 01 02 78 00 00 09 1E 00 01
q些压羃数据可解释ؓ Q?/font>

压羃数据 

扩展数据

03 04 04 04 04 
05 06 06 06 06 06 06 
00 03 45 56 67 00 45 56 67 
02 78 78 78 
00 02 05 01 从当前位|右U?个位|后向下UM?/font>
02 78 78 78 
00 00 行结?/font>
09 1E 1E 1E 1E 1E 1E 1E 1E 1E 1E 
00 01 RLE~码图象l束 

?BI_RLE4Q?/font>

~码方式Q由2个字节组成,W一个字节指定象素数目,W二个字节包含两U颜色烦引,一个在?位,另一个在?位。第一个象素用高4位的颜色索引Q第二个使用?位的颜色索引Q第3个用高4位的颜色索引Q依此类推?/font>

l对方式Q这个字节对中的W一个字节设|ؓ0Q第二个字节包含有颜色烦引数Q其后箋字节包含有颜色烦引,颜色索引存放在该字节的高、低4位中Q一个颜色烦引对应一个象素。此外,BI_RLE4也同栯合用第二个字节中的DC:

W二个字节的gؓ0Q行的结束?
W二个字节的gؓ1Q图象结束?
W二个字节的gؓ2Q其后的两个字节表示下一个象素从当前开始的水^和垂直位|的偏移量?

下面的例子是?6q制数表C的4-位压~图象数据:

03 04 05 06 00 06 45 56 67 00 04 78 00 02 05 01 04 78 00 00 09 1E 00 01

q些压羃数据可解释ؓ Q?/font>

压羃数据

扩展数据

03 04 0 4 0
05 06 0 6 0 6 0 
00 06 45 56 67 00 4 5 5 6 6 7 
04 78 7 8 7 8 
00 02 05 01 从当前位|右U?个位|后向下UM?/font>
04 78 7 8 7 8 
00 00 行结?/font>
09 1E 1 E 1 E 1 E 1 E 1 
00 01 RLE图象l束 

3. 彩色?/font>

? 色表包含的元素与位图所h的颜色数相同Q象素的颜色用RGBQUADl构来定义。对?4-位真彩色图象׃使用彩色表(同样也包?6位、和32位位 图)Q因Z图中的RGB值就代表了每个象素的颜色。彩色表中的颜色按颜色的重要性排序,q可以辅助显C驱动程序ؓ不能昄_多颜色数的显C备显C彩 色图象。RGBQUADl构描述由R、G、B相对强度l成的颜Ԍ定义如下Q?/font>

typedef struct tagRGBQUAD { /* rgbq */

BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;

 

其中Q?/font>
 

rgbBlue

指定蓝色强度

rgbGreen

指定l色强度

rgbRed

指定U色强度

rgbReserved

保留Q设|ؓ0

4. 位图数据

? 跟在彩色表之后的是图象数据字节阵列。图象的每一扫描行由表示图象象素的连l的字节l成Q每一行的字节数取决于图象的颜色数目和用象素表C的图象宽度。扫 描行是由底向上存储的Q这是_阵列中的W一个字节表CZ囑ַ下角的象素,而最后一个字节表CZ囑֏上角的象素。(只针对与倒向DIBQ如果是正向 DIBQ则扫描行是由顶向下存储的)Q倒向DIB的原点在囑փ的左下角Q而正向DIB的原点在囑փ的左上角。同Ӟ每一扫描行的字节数必需?的整倍数Q? 也就是DWORD寚w的。如果你想确保图像的扫描行DWORD寚wQ可使用下面的代码:

(((width*biBitCount)+31)>>5)<<2

5. 参考书?/strong>

《图象文件格?上、下)—Windows~程?br />《图像文件格式大全?br />《Programming Windows by Charles Petzold?br />

6. 相关站点

各种格式Qhttp://www.wotsit.org/
各种格式Qhttp://www.csdn.net/
位图格式Qhttp://www.cica.indiana.edu/graphics/image_specs/bmp.format.txt

〈完?br />YZ 2000-8-13 13:11

 
每个象素?比特的RLE压羃~码Q同样也可用编码方式和l对方式中的M一U进行压~,q两U方式也可在同一q图中的M地方使用。这两种方式是:

蓝色q默 2007-09-21 10:09 发表评论
]]>
JAVA cookies用法http://www.aygfsteel.com/jdo/articles/138181.html蓝色q默蓝色q默Mon, 20 Aug 2007 08:38:00 GMThttp://www.aygfsteel.com/jdo/articles/138181.htmlhttp://www.aygfsteel.com/jdo/comments/138181.htmlhttp://www.aygfsteel.com/jdo/articles/138181.html#Feedback0http://www.aygfsteel.com/jdo/comments/commentRss/138181.htmlhttp://www.aygfsteel.com/jdo/services/trackbacks/138181.html 涉及login.jsp和login_do.jsp
1.先在login_do.jsp里面获取cookies代码如下
代码是加在登录成功的下面
Cookie cookie1=new Cookie("login_name",name);
                           键         ??br />Cookie cookie2=new Cookie("login_pass",pass)
值是从后面获取的
q个键是  login.jsp里面要用到的Qname是从login_do.jsp里面
d?br />cookie1.setMaxAge(60*60*24);讄cookie的有效时_单位是秒
q里是保存一?br />response.addCookie(cookie1);
response.addCookie(cookie2);
 把捕h的cookies加到响应里,q步必不可少
response.sendRedirect("index.jsp");
 //d成功转发的页?br />2.在login.jsp里面加代?br />Cookie[] cookie=request.getCookies();
String name="",pass="";
for(int i=0;i<cookie.length;i++){
 if(cookie[i].getName.equals("login_name"))
  name=cookie[i].getValue();
 if(cookie[i].getName.equals("login_pass"))
  pass=cookie[i].getValue();
}
在表单的变量那里加上q个可以了
<input name="name" value="<%=name %>" type="text" id="name">
<input name="pwd" value="<%=pwd %>" type="password" id="pwd2">

蓝色q默 2007-08-20 16:38 发表评论
]]>
HttpServletRequest.getRequestURI()和HttpServletRequest.getRequestURL()区别是什? http://www.aygfsteel.com/jdo/articles/138098.html蓝色q默蓝色q默Mon, 20 Aug 2007 05:04:00 GMThttp://www.aygfsteel.com/jdo/articles/138098.htmlhttp://www.aygfsteel.com/jdo/comments/138098.htmlhttp://www.aygfsteel.com/jdo/articles/138098.html#Feedback0http://www.aygfsteel.com/jdo/comments/commentRss/138098.htmlhttp://www.aygfsteel.com/jdo/services/trackbacks/138098.html  request.getRequestURI() q回值类|/xuejava/requestdemo.jsp
  
  request.getRequestURL() q回值类|http://localhost:8080/xuejava/requestdemo.jsp 

 

附:

request.getContextPath() = /hboys
request.getLocalAddr() = 127.0.0.1
request.getPathInfo() = null
request.getPathTranslated() = null
request.getRemoteAddr() = 127.0.0.1
request.getRequestURI() = /hboys/
request.getScheme() = http
request.getServerName() = 127.0.0.1
request.getServletPath() = /index.jsp
request.getClass() = class org.apache.catalina.connector.RequestFacade
request.getHeaderNames() = org.apache.tomcat.util.http.NamesEnumerator@1ad0839
request.getLocale() = zh_CN
request.getLocales() = org.apache.catalina.util.Enumerator@f6f1b6
request.getParameterMap() = {}
request.getRequestURL() = http://127.0.0.1:8081/hboys/
request.getUserPrincipal() = null
request.getParameterNames() = java.util.Hashtable$EmptyEnumerator@1629e71
request.getRealPath("newsPub") = D:\workspace\hboys\WebRoot\newsPub

蓝色q默 2007-08-20 13:04 发表评论
]]>
Java路径问题最l解x?/title><link>http://www.aygfsteel.com/jdo/articles/136791.html</link><dc:creator>蓝色q默</dc:creator><author>蓝色q默</author><pubDate>Tue, 14 Aug 2007 15:15:00 GMT</pubDate><guid>http://www.aygfsteel.com/jdo/articles/136791.html</guid><wfw:comment>http://www.aygfsteel.com/jdo/comments/136791.html</wfw:comment><comments>http://www.aygfsteel.com/jdo/articles/136791.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jdo/comments/commentRss/136791.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jdo/services/trackbacks/136791.html</trackback:ping><description><![CDATA[ <div> <strong> <font size="6">前言</font> </strong> </div> <div style="text-indent: 24pt;">Java的\径问题,非常难搞。最q的工作涉及到创建和d文g的工作,q里我就l大家彻底得解决Java路径问题?/div> <div style="text-indent: 24pt;">? ~写了一个方法,比ClassLoader.getResource(String 相对路径)Ҏ(gu)的能力更强。它可以接受?./”这L(fng)参数Q允许我们用相对路径来定位classpath外面的资源。这P我们可以用相对于 classpath的\径,定位所有位|的资源Q?/div> <div style="text-indent: 24pt;"> </div> <div> <strong> <font size="6">Java路径</font> </strong> </div> <div style="text-indent: 24pt;">Java中用的路径Q分ZU:l对路径和相对\径。具体而言Q又分ؓ四种Q?/div> <div> <strong> <font size="4">一、URI形式的绝对资源\?/font> </strong> </div> <div>如:file:/D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b</div> <div style="text-indent: 24pt;">URL是URI的特例。URL的前~/协议Q必LJava认识的。URL可以打开资源Q而URI则不行?/div> <div style="text-indent: 24pt;">URL和URI对象可以互相转换Q用各自的toURI(),toURL()Ҏ(gu)卛_Q?/div> <div> </div> <div> <strong> <font size="4">二、本地系l的l对路径</font> </strong> </div> <div>D:/java/eclipse32/workspace/jbpmtest3/bin/aaa.b</div> <div style="text-indent: 24pt;">Java.io包中的类Q需要用这UŞ式的参数?/div> <div style="text-indent: 24pt;">但是Q它们一般也提供了URIcd的参敎ͼ而URIcd的参敎ͼ接受的是URI样式的String。因此,通过URI转换Q还是可以把URI样式的绝对\径用在java.io包中的类中?/div> <div> </div> <div> <strong> <font size="4">三、相对于classpath的相对\?/font> </strong> </div> <div>如:相对?/div> <div>file:/D:/java/eclipse32/workspace/jbpmtest3/bin/q个路径的相对\径。其中,bin是本目的classpath。所有的Java源文件编译后?class文g复制到这个目录中?/div> <div> </div> <div> </div> <div> <strong> <font size="4">四、相对于当前用户目录的相对\?/font> </strong> </div> <div>是相对于System.getProperty("user.dir")q回的\径?/div> <div style="text-indent: 24pt;">对于一般项目,q是目的根路径。对于JavaEE服务器,q可能是服务器的某个路径。这个ƈ没有l一的规范!</div> <div style="text-indent: 24pt;">所以,l对不要使用“相对于当前用户目录的相对\径”。然而:</div> <div> <strong> <span style="color: windowtext;">默认情况下,java.io 包中的类LҎ(gu)当前用户目录来分析相对\径名。此目录ql属?user.dir 指定Q通常?Java 虚拟机的调用目录?/span> </strong> </div> <div style="text-indent: 24.75pt;"> <span style="color: windowtext;">q就是说Q在使用java.io包中的类Ӟ最好不要用相对\径。否则,虽然在J2SE应用E序中可能还正常,但是CJ2EEE序中,一定会出问题!而且q个路径Q在不同的服务器中都是不同的Q?/span> </div> <div> </div> <div> <strong> <font size="6">相对路径最?jng)_?/font> </strong> </div> <div> <strong> <font size="5">推荐使用相对于当前classpath的相对\?/font> </strong> </div> <div style="text-indent: 24pt;">因此Q我们在使用相对路径Ӟ应当使用相对于当前classpath的相对\径?/div> <div style="text-indent: 24pt;">ClassLoadercȝgetResource(String name),<code><strong>getResourceAsStream</strong>(String name){方法,使用相对于当前项目的classpath的相对\径来查找资源?/code></div> <div style="text-indent: 24pt;">d属性文件常用到的ResourceBundlecȝgetBundle(String path)也是如此?/div> <div style="text-indent: 24pt;">? q查看ClassLoadercd其相关类的源代码Q我发现Q它实际上还是用了URI形式的绝对\径。通过得到当前classpath的URI形式的绝 对\径,构徏了相对\径的URI形式的绝对\径。(q个实际上是猜想Q因为JDK内部调用了SUN的源代码Q而这些代码不属于JDKQ不是开源的。)</div> <div> </div> <div> <strong> <font size="5">相对路径本质上还是绝对\?/font> </strong> </div> <div style="text-indent: 24pt;"> <strong> <span style="font-size: 15pt;">因此Q归根结底,</span> </strong> <strong> <span style="font-size: 15pt;">Java</span> </strong> <strong> <span style="font-size: 15pt;">本质上只能用绝对\径来L资源。所有的相对路径L资源的方法,都不q是一些便利方法。不q是</span> </strong> <strong> <span style="font-size: 15pt;">API</span> </strong> <strong> <span style="font-size: 15pt;">在底层帮助我们构Zl对路径Q从而找到资源的Q?/span> </strong> </div> <div> </div> <div> <strong> <font size="5">得到classpath和当前类的绝对\径的一些方?/font> </strong> </div> <div> <span>    </span>下面是一些得到classpath和当前类的绝对\径的一些方法。你可能需要用其中的一些方法来得到你需要的资源的绝对\径?/div> <div> <strong>1</strong> <strong>QFileTest.class.getResource("")</strong> </div> <div style="text-indent: 24pt;">得到的是当前cFileTest.class文g的URI目录。不包括自己Q?/div> <div style="text-indent: 24pt;">如:<span style="font-size: 10pt;">file:/D:/java/eclipse32/workspace/jbpmtest3/bin/com/test/</span></div> <div> <strong>2</strong> <strong>QFileTest.<span>class.getResource("/")</span></strong> </div> <div style="text-indent: 24pt;">得到的是当前的classpath的绝对URI路径?/div> <div style="text-indent: 24pt;">如:<span style="font-size: 10pt;">file:/D:/java/eclipse32/workspace/jbpmtest3/bin/</span></div> <div> <strong> <span style="font-size: 10pt;">3</span> </strong> <strong> <span style="font-size: 10pt;">QThread.currentThread().getContextClassLoader().getResource("")</span> </strong> </div> <div style="text-indent: 21pt;"> <span style="font-size: 10pt;">得到的也是当前ClassPath的绝对URI路径?/span> </div> <div style="text-indent: 24pt;">如:<span style="font-size: 10pt;">file:/D:/java/eclipse32/workspace/jbpmtest3/bin/</span></div> <div> <strong> <span style="font-size: 10pt;">4</span> </strong> <strong> <span style="font-size: 10pt;">QFileTest.<span>class.getClassLoader().getResource("")</span></span> </strong> </div> <div style="text-indent: 21pt;"> <span style="font-size: 10pt;">得到的也是当前ClassPath的绝对URI路径?/span> </div> <div style="text-indent: 24pt;">如:<span style="font-size: 10pt;">file:/D:/java/eclipse32/workspace/jbpmtest3/bin/</span></div> <div> <strong>5</strong> <strong>QClassLoader.getSystemResource("")</strong> </div> <div style="text-indent: 21pt;"> <span style="font-size: 10pt;">得到的也是当前ClassPath的绝对URI路径?/span> </div> <div style="text-indent: 24pt;">如:<span style="font-size: 10pt;">file:/D:/java/eclipse32/workspace/jbpmtest3/bin/</span></div> <div> <strong> <span>    </span> </strong> </div> <div style="text-indent: 24pt;"> <strong>我推荐?/strong> <strong> <span style="font-size: 10pt;">Thread.currentThread().getContextClassLoader().getResource("")</span> </strong> <strong> <span style="font-size: 10pt;">来得到当前的classpath的绝对\径的URI表示法?/span> </strong> </div> <div> <strong> </strong> </div> <div> <strong> <font size="5">Web应用E序中资源的d</font> </strong> </div> <div> <span>    </span>上文中说q,当前用户目录Q即相对于System.getProperty("user.dir")q回的\径?/div> <div style="text-indent: 24pt;">对于JavaEE服务器,q可能是服务器的某个路径Q这个ƈ没有l一的规范!</div> <div style="text-indent: 24pt;">而不是我们发布的Web应用E序的根目录Q?/div> <div style="text-indent: 24pt;">q样Q在Web应用E序中,我们l对不能使用相对于当前用L(fng)录的相对路径?/div> <div style="text-indent: 24pt;">在Web应用E序中,我们一般通过ServletContext.getRealPath("/")Ҏ(gu)得到Web应用E序的根目录的绝对\径?/div> <div style="text-indent: 24pt;">q样Q我们只需要提供相对于Web应用E序根目录的路径Q就可以构徏出定位资源的l对路径?/div> <div style="text-indent: 24pt;">q是我们开发Web应用E序时一般所采取的策略?/div> <div> </div> <div> <strong> <font size="6">通用的相对\径解军_?/font> </strong> </div> <div style="text-indent: 24pt;">Java中各U相对\径非常多Q不Ҏ(gu)使用Q非常容易出错。因此,我编写了一个便利方法,帮助更容易的解决相对路径问题?/div> <div> </div> <div> <strong> <font size="5">Web应用E序中用JavaSEq行的资源寻址问题</font> </strong> </div> <div style="text-indent: 24pt;">在JavaSEE序中,我们一般用classpath来作为存放资源的目的地。但是,在Web应用E序中,我们一般用classpath外面的WEB-INF及其子目录作源文件的存放地?/div> <div style="text-indent: 24pt;">在Web应用E序中,我们一般通过ServletContext.getRealPath("/")Ҏ(gu)得到Web应用E序的根目录的绝对\径。这P我们只需要提供相对于Web应用E序根目录的路径Q就可以构徏出定位资源的l对路径?/div> <div style="text-indent: 24pt;">Web应用E序Q可以作为Web应用E序q行发布和运行。但是,我们也常怼以JavaSE的方式来q行W(xu)eb应用E序的某个类的mainҎ(gu)。或者,使用JUnit试。这都需要用JavaSE的方式来q行?/div> <div style="text-indent: 24pt;">q样Q我们就无法使用ServletContext.getRealPath("/")Ҏ(gu)得到Web应用E序的根目录的绝对\径?/div> <div style="text-indent: 24pt;">而JDK提供的ClassLoaderc,</div> <div style="text-indent: 24pt;">它的getResource(String name),<code><strong>getResourceAsStream</strong>(String name){方法,使用相对于当前项目的classpath的相对\径来查找资源?/code></div> <div style="text-indent: 24pt;">d属性文件常用到的ResourceBundlecȝgetBundle(String path)也是如此?/div> <div style="text-indent: 24pt;">它们都只能用相对\径来dclasspath下的资源Q无法定位到classpath外面的资源?/div> <div> <strong> <font size="4">Classpath外配|文件读取问?/font> </strong> </div> <div style="text-indent: 24pt;">如,我们使用试驱动开发的Ҏ(gu)Q开发Spring、Hibernate、iBatis{用配|文件的Web应用E序Q就会遇到问题?/div> <div style="text-indent: 24pt;">管Spring自己提供了FileSystemQ也是相对于user,dir目录Q来dWeb配置文g的方法,但是l究不是很方ѝ而且与WebE序中的代码使用方式不一_</div> <div>至于HibernateQiBatis更ȝ了!只有把配|文件移到classpath下,否则Ҏ(gu)不可能用测试驱动开发!</div> <div> </div> <div> <span>    </span>q怎么办?</div> <div> </div> <div> <strong> <font size="6">通用的相对\径解军_?/font> </strong> </div> <div style="text-indent: 24pt;">面对q个问题Q我军_~写一个助手类<span style="background: silver none repeat scroll 0% 50%; font-size: 10pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">ClassLoaderUtil</span>Q提供一个便利方法[<strong>public</strong><strong>static</strong> URL getExtendResource(String relativePath)]。在Web应用E序{一切JavaE序中,需要定位classpath外的资源Ӟ都用这个助手类的便利方法,而不使用 Web应用E序Ҏ(gu)的ServletContext.getRealPath("/")Ҏ(gu)来定位资源?/div> <div> </div> <div> <strong> <font size="4">利用classpath的绝对\径,定位所有资?/font> </strong> </div> <div style="text-indent: 24pt;">q个便利Ҏ(gu)的实现原理,是“利用classpath的绝对\径,定位所有资源”?/div> <div style="text-indent: 24pt;">ClassLoadercȝgetResource("")Ҏ(gu)能够得到当前classpath的绝对\径,q是所有JavaE序都拥有的能力Q具有最大的适应性!</div> <div style="text-indent: 24pt;">而目前的JDK提供的ClassLoadercȝgetResource(String 相对路径)Ҏ(gu)Q只能接受一般的相对路径。这P使用ClassLoadercȝgetResource(String 相对路径)Ҏ(gu)只能定位到classpath下的资源?/div> <div style="text-indent: 24.1pt;"> <strong>如果Q它能够接受?./</strong> <strong>”这L(fng)参数Q允许我们用相对路径来定位classpath</strong> <strong>外面的资源,那么我们可以定位位|的资源Q?/strong> </div> <div style="text-indent: 24pt;">当然Q我无法修改ClassLoadercȝq个Ҏ(gu)Q于是,我编写了一个助手类ClassLoaderUtilc,提供了[<strong>public</strong><strong>static</strong> URL getExtendResource(String relativePath)]q个Ҏ(gu)。它能够接受带有?./”符L(fng)相对路径Q实C自由L资源的功能?/div> <div> </div> <div> <strong> <font size="6">通过相对classpath路径实现自由L资源的助手类的源代码Q?br /></font> </strong> <br /> <div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"> <!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> <span style="color: rgb(0, 0, 255);">package</span> <span style="color: rgb(0, 0, 0);"> com.commonStrut.utils;<br /><br /></span> <span style="color: rgb(0, 0, 255);">import</span> <span style="color: rgb(0, 0, 0);"> java.io.IOException;<br /></span> <span style="color: rgb(0, 0, 255);">import</span> <span style="color: rgb(0, 0, 0);"> java.io.InputStream;<br /></span> <span style="color: rgb(0, 0, 255);">import</span> <span style="color: rgb(0, 0, 0);"> java.net.MalformedURLException;<br /></span> <span style="color: rgb(0, 0, 255);">import</span> <span style="color: rgb(0, 0, 0);"> java.net.URL;<br /></span> <span style="color: rgb(0, 0, 255);">import</span> <span style="color: rgb(0, 0, 0);"> java.util.Properties;<br /><br /></span> <span style="color: rgb(0, 0, 255);">import</span> <span style="color: rgb(0, 0, 0);"> org.apache.commons.logging.Log;<br /></span> <span style="color: rgb(0, 0, 255);">import</span> <span style="color: rgb(0, 0, 0);"> org.apache.commons.logging.LogFactory;<br /><br /></span> <span style="color: rgb(0, 128, 0);">/**</span> <span style="color: rgb(0, 128, 0);"> <br /> *  用来加蝲c,ClassPath下的资源文gQ属性文件等?br /> *  getExtendResource(StringrelativePath)Ҏ(gu)Q可以?./W号来加载ClassPath外部的资源?br /> *  <br /> * </span> <span style="color: rgb(128, 128, 128);">@author</span>  <span style="color: rgb(0, 128, 0);">蓝色q默 整理                    <br /> </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /></span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);"> ClassLoaderUtil {<br />    <br />    </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> Log log </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> LogFactory.getLog(ClassLoaderUtil.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">);<br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * Thread.currentThread().getContextClassLoader().getResource("")<br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * 加蝲JavacR 用全限定cd<br />     * <br />     * @paramclassName<br />     * </span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    @SuppressWarnings(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">unchecked</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)<br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> Class loadClass(String className) {<br />        </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"> {<br />            </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> getClassLoader().loadClass(className);<br />        } </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);"> (ClassNotFoundException e) {<br />            </span><span style="color: rgb(0, 0, 255);">throw</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> RuntimeException(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> class not found ' </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> className </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> ' </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, e);<br />        }<br />    }<br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * 得到cd载器<br />     * <br />     * </span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> ClassLoader getClassLoader() {<br /><br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> ClassLoaderUtil.</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">.getClassLoader();<br />    }<br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * 提供相对于classpath的资源\径,q回文g的输入流<br />     * <br />     * @paramrelativePath必须传递资源的相对路径。是相对于classpath的\径。如果需要查找classpath外部的资源,需要?./来查?br />     * </span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"> 文g输入?br />     * @throwsIOException<br />     * @throwsMalformedURLException<br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> InputStream getStream(String relativePath) </span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);"> MalformedURLException, IOException {<br />        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">relativePath.contains(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> ../ </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)) {<br />            </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> getClassLoader().getResourceAsStream(relativePath);<br /><br />        } </span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"> {<br />            </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> ClassLoaderUtil.getStreamByExtendResource(relativePath);<br />        }<br /><br />    }<br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * <br />     * @paramurl<br />     * </span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br />     * @throwsIOException<br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> InputStream getStream(URL url) </span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);"> IOException {<br />        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (url </span><span style="color: rgb(0, 0, 0);">!=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">) {<br /><br />            </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> url.openStream();<br /><br />        } </span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);"> {<br />            </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">null</span><span style="color: rgb(0, 0, 0);">;<br />        }<br />    }<br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * <br />     * @paramrelativePath必须传递资源的相对路径。是相对于classpath的\径。如果需要查找classpath外部的资源,需要?./来查?br />     * </span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br />     * @throwsMalformedURLException<br />     * @throwsIOException<br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> InputStream getStreamByExtendResource(String relativePath) </span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);"> MalformedURLException,<br />            IOException {<br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> ClassLoaderUtil.getStream(ClassLoaderUtil.getExtendResource(relativePath));<br /><br />    }<br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * 提供相对于classpath的资源\径,q回属性对象,它是一个散列表<br />     * <br />     * @paramresource<br />     * </span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> Properties getProperties(String resource) {<br />        Properties properties </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> Properties();<br />        </span><span style="color: rgb(0, 0, 255);">try</span><span style="color: rgb(0, 0, 0);"> {<br />            properties.load(getStream(resource));<br />        } </span><span style="color: rgb(0, 0, 255);">catch</span><span style="color: rgb(0, 0, 0);"> (IOException e) {<br />            </span><span style="color: rgb(0, 0, 255);">throw</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> RuntimeException(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> couldn't load properties file ' </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> resource </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> ' </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, e);<br />        }<br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> properties;<br />    }<br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * 得到本Class所在的ClassLoader的Classpat的绝对\径。 URL形式?br />     * <br />     * </span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> String getAbsolutePathOfClassLoaderClassPath() {<br /><br />        ClassLoaderUtil.log.info(ClassLoaderUtil.getClassLoader().getResource(</span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">).toString());<br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> ClassLoaderUtil.getClassLoader().getResource(</span><span style="color: rgb(0, 0, 0);">""</span><span style="color: rgb(0, 0, 0);">).toString();<br /><br />    }<br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * <br />     * @paramrelativePath 必须传递资源的相对路径。是相对于classpath的\径。如果需要查找classpath外部的资源,需要?./来查?br />     * @return资源的绝对URL<br />     * @throwsMalformedURLException<br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> URL getExtendResource(String relativePath) </span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);"> MalformedURLException {<br /><br />        ClassLoaderUtil.log.info(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> 传入的相对\径: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> relativePath);<br />        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> ClassLoaderUtil.log.info(Integer.valueOf(relativePath.indexOf("../")))<br />        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> ;</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 0);">!</span><span style="color: rgb(0, 0, 0);">relativePath.contains(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> ../ </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)) {<br />            </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> ClassLoaderUtil.getResource(relativePath);<br /><br />        }<br />        String classPathAbsolutePath </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> ClassLoaderUtil.getAbsolutePathOfClassLoaderClassPath();<br />        </span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);"> (relativePath.substring(</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">, </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">).equals(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> / </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)) {<br />            relativePath </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> relativePath.substring(</span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br />        }<br />        ClassLoaderUtil.log.info(Integer.valueOf(relativePath.lastIndexOf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> ../ </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">)));<br /><br />        String wildcardString </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> relativePath.substring(</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">, relativePath.lastIndexOf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> ../ </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">) </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">);<br />        relativePath </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> relativePath.substring(relativePath.lastIndexOf(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> ../ </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">) </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">3</span><span style="color: rgb(0, 0, 0);">);<br />        </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> containSum </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> ClassLoaderUtil.containSum(wildcardString, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> ../ </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />        classPathAbsolutePath </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> ClassLoaderUtil.cutLastString(classPathAbsolutePath, </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> / </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">, containSum);<br />        String resourceAbsolutePath </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> classPathAbsolutePath </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> relativePath;<br />        ClassLoaderUtil.log.info(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> l对路径Q?/span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> resourceAbsolutePath);<br />        URL resourceAbsoluteURL </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);"> URL(resourceAbsolutePath);<br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> resourceAbsoluteURL;<br />    }<br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * <br />     * @paramsource<br />     * @paramdest<br />     * </span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> containSum(String source, String dest) {<br />        </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> containSum </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br />        </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> destLength </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> dest.length();<br />        </span><span style="color: rgb(0, 0, 255);">while</span><span style="color: rgb(0, 0, 0);"> (source.contains(dest)) {<br />            containSum </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> containSum </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">;<br />            source </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> source.substring(destLength);<br /><br />        }<br /><br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> containSum;<br />    }<br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * <br />     * @paramsource<br />     * @paramdest<br />     * @paramnum<br />     * </span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> String cutLastString(String source, String dest, </span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> num) {<br />        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> String cutSource=null;</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">        </span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);"> (</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);"> i </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">; i </span><span style="color: rgb(0, 0, 0);"><</span><span style="color: rgb(0, 0, 0);"> num; i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">) {<br />            source </span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);"> source.substring(</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">, source.lastIndexOf(dest, source.length() </span><span style="color: rgb(0, 0, 0);">-</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">2</span><span style="color: rgb(0, 0, 0);">) </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">1</span><span style="color: rgb(0, 0, 0);">);<br /><br />        }<br /><br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> source;<br />    }<br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * <br />     * @paramresource<br />     * </span><span style="color: rgb(128, 128, 128);">@return</span><span style="color: rgb(0, 128, 0);"><br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> URL getResource(String resource) {<br />        ClassLoaderUtil.log.info(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> 传入的相对于classpath的\径: </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 0);">+</span><span style="color: rgb(0, 0, 0);"> resource);<br />        </span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);"> ClassLoaderUtil.getClassLoader().getResource(resource);<br />    }<br /><br />    </span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />     * @paramargs<br />     * @throwsMalformedURLException<br />     </span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />    </span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">static</span><span style="color: rgb(0, 0, 0);"> </span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);"> main(String[] args) </span><span style="color: rgb(0, 0, 255);">throws</span><span style="color: rgb(0, 0, 0);"> MalformedURLException {<br /><br />        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> ClassLoaderUtil.getExtendResource("../spring/dao.xml");<br />        </span><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);"> ClassLoaderUtil.getExtendResource("../../../src/log4j.properties");</span><span style="color: rgb(0, 128, 0);"><br /></span><span style="color: rgb(0, 0, 0);">        ClassLoaderUtil.getExtendResource(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> log4j.properties </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br /><br />        System.out.println(ClassLoaderUtil.getClassLoader().getResource(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);"> log4j.properties </span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">).toString());<br /><br />    }<br />}</span></div> <br /> <div> <strong> <font size="6">后记</font> </strong> </div> <div style="text-indent: 24pt;">ClassLoaderUtilcȝpublic static URL getExtendResource(String relativePath)Q虽然很单,但是实可以解决大问题?/div> <div style="text-indent: 24pt;">不过q个Ҏ(gu)q是比较陋的。我q想在未来有I时Q进一步增强它的能力。比如,增加Ant风格的匹配符。用**代表多个目录Q?代表多个字符Q?代表一个字W。达到Spring那样的能力,一ơ返回多个资源的URLQ进一步方便大家开发?/div> <div> </div> <div> <strong> <font size="4">ȝQ?/font> </strong> </div> <div>1Q尽量不要用相对于System.getProperty("user.dir")当前用户目录的相对\径。这是一颗定时炸弹,随时可能要你的命?/div> <div>2Q尽量用URI形式的绝对\径资源。它可以很容易的转变为URI,URLQFile对象?/div> <div>3Q? 量使用相对classpath的相对\径。不要用绝对\径。用上面ClassLoaderUtilcȝpublic static URL getExtendResource(String relativePath)Ҏ(gu)已经能够使用相对于classpath的相对\径定位所有位|的资源?/div> <div>4Q绝对不要用硬~码的绝对\径。因为,我们完全可以使用ClassLoadercȝgetResource("")Ҏ(gu)得到当前classpath的绝对\径?/div> <div style="text-indent: 24pt;">使用编码的l对路径是完全没有必要的Q它一定会让你ȝ很难看!E序无法移植!</div> <div style="text-indent: 24pt;">如果你一定要指定一个绝对\径,那么使用配置文gQ也比硬~码要好得多Q?/div> <div>当然Q我q是推荐你用程序得到classpath的绝对\径来D源的l对路径Q?/div> <br /> </div> <img src ="http://www.aygfsteel.com/jdo/aggbug/136791.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jdo/" target="_blank">蓝色q默</a> 2007-08-14 23:15 <a href="http://www.aygfsteel.com/jdo/articles/136791.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中private, public,protected的区?/title><link>http://www.aygfsteel.com/jdo/articles/134990.html</link><dc:creator>蓝色q默</dc:creator><author>蓝色q默</author><pubDate>Tue, 07 Aug 2007 08:04:00 GMT</pubDate><guid>http://www.aygfsteel.com/jdo/articles/134990.html</guid><wfw:comment>http://www.aygfsteel.com/jdo/comments/134990.html</wfw:comment><comments>http://www.aygfsteel.com/jdo/articles/134990.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jdo/comments/commentRss/134990.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jdo/services/trackbacks/134990.html</trackback:ping><description><![CDATA[ <p> <span style="font-size: 9pt;"> <font face="宋体">说明q四个关键字之前Q我惛_</font> </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">class</span> <span style="font-size: 9pt;"> <font face="宋体">之间的关pd一个简单的定义Q对于承自q</font> </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">class</span> <span style="font-size: 9pt;"> <font face="宋体">Q?/font> </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">base class</span> <span style="font-size: 9pt;"> <font face="宋体">可以认ؓ他们都是自己的子奻I而对于和自己一个目录下?/font> </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">classes</span> <span style="font-size: 9pt;"> <font face="宋体">Q认为都是自q朋友?/font> </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US"> <br /></span> <br /> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">1</span><span style="font-size: 9pt;"><font face="宋体">?/font></span><span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">public</span><span style="font-size: 9pt;"><font face="宋体">Q?/font></span><span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">public</span><span style="font-size: 9pt;"><font face="宋体">表明该数据成员、成员函数是Ҏ(gu)有用户开攄Q所有用户都可以直接q行调用<br /></font></span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">2</span><span style="font-size: 9pt;"><font face="宋体">?/font></span><span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">private</span><span style="font-size: 9pt;"><font face="宋体">Q?/font></span><span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">private</span><span style="font-size: 9pt;"><font face="宋体">表示U有Q私有的意思就是除?/font></span><span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">class</span><span style="font-size: 9pt;"><font face="宋体">自己之外QQ何h都不可以直接使用Q私有胦产神圣不可R犯嘛Q即便是子女Q朋友,都不可以使用?br /></font></span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">3</span><span style="font-size: 9pt;"><font face="宋体">?/font></span><span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">protected</span><span style="font-size: 9pt;"><font face="宋体">Q?/font></span><span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">protected</span><span style="font-size: 9pt;"><font face="宋体">对于子女、朋友来_是</font></span><span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">public</span><span style="font-size: 9pt;"><font face="宋体">的,可以自由使用Q没有Q何限Ӟ而对于其他的外部</font></span><span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">class</span><span style="font-size: 9pt;"><font face="宋体">Q?/font></span><span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">protected</span><span style="font-size: 9pt;"><font face="宋体">变?/font></span><span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">private</span><span style="font-size: 9pt;"><font face="宋体">?/font></span><span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US"></span></p> <p> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US"> </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">作用域 ?当前c 同一package 子孙c 其他package </span> </p> <p> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">public         √          ?√  ?        √    ?      √?br /><br />protected   </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">√          ?√ ?         √     ?     </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">× <br /><br />friendly      </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">√          ?√ ?         </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US"> </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">×</span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">           </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">× </span> <br /> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US"> <br />private       </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US"> </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">√          ?</span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">×</span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US"> </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">          </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US"> </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">  ×</span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">           </span> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US">× </span> <br /> <span style="font-size: 9pt; font-family: Tahoma;" lang="EN-US"> <br /> <b>不写旉认ؓfriendly </b> <br /> </span> </p> <img src ="http://www.aygfsteel.com/jdo/aggbug/134990.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jdo/" target="_blank">蓝色q默</a> 2007-08-07 16:04 <a href="http://www.aygfsteel.com/jdo/articles/134990.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PO BO VO DTO POJO DAO概念及其作用http://www.aygfsteel.com/jdo/articles/134769.html蓝色q默蓝色q默Mon, 06 Aug 2007 11:43:00 GMThttp://www.aygfsteel.com/jdo/articles/134769.htmlhttp://www.aygfsteel.com/jdo/comments/134769.htmlhttp://www.aygfsteel.com/jdo/articles/134769.html#Feedback0http://www.aygfsteel.com/jdo/comments/commentRss/134769.htmlhttp://www.aygfsteel.com/jdo/services/trackbacks/134769.html

POQ全U是
persistant object持久对象
最形象的理解就是一个PO是数据库中的一条记录?br />好处是可以把一条记录作Z个对象处理,可以方便的{为其它对象?/p>

---------------------------------------------------------

BOQ全U是
business object:业务对象
主要作用是把业务逻辑装Z个对象。这个对象可以包括一个或多个其它的对象?br />比如一个简历,有教育经历、工作经历、社会关pȝ{?br />我们可以把教育经历对应一个POQ工作经历对应一个POQ社会关pd应一个PO?br />建立一个对应简历的BO对象处理历,每个BO包含q些PO?br />q样处理业务逻辑Ӟ我们可以针对BOd理?br />----------------------------------------------------------

VO Q?br />value object值对?br />ViewObject表现层对?br />主要对应界面昄的数据对象。对于一个WEB面Q或者SWT、SWING的一个界面,用一个VO对象对应整个界面的倹{?br />----------------------------------------------------------

DTO Q?br />Data Transfer Object数据传输对象
主要用于q程调用{需要大量传输对象的地方?br />比如我们一张表?00个字D,那么对应的PO有100个属性?br />但是我们界面上只要显C?0个字D,
客户端用WEB service来获取数据,没有必要把整个PO对象传递到客户端,
q时我们可以用只有q?0个属性的DTO来传递结果到客户端,q样也不会暴露服务端表结?到达客户端以后,如果用这个对象来对应界面昄Q那此时它的w䆾p{为VO
----------------------------------------------------------

POJO Q?br />plain ordinary java object 单java对象
个h感觉POJO是最常见最多变的对象,是一个中间对象,也是我们最常打交道的对象?br />
一个POJO持久化以后就是PO
直接用它传递、传递过E中是DTO
直接用来对应表示层就是VO

----------------------------------------------------------

DAOQ?br />data access object数据讉K对象
q个大家最熟?zhn)Q和上面几个O区别最大,基本没有互相转化的可能性和必要.
主要用来装Ҏ(gu)据库的访问。通过它可以把POJO持久化ؓPOQ用POl装出来VO、DTO
----------------------------------------------------------

snap20070108.jpg



蓝色q默 2007-08-06 19:43 发表评论
]]>
վ֩ģ壺 | ƽ| | | | | Ѿ| °| | ԭ| | | | ½| | | | բ| ұ| ½| | | ̩| | żҽ| ̨| | | ľ| | | ɽ| | ̫| ɶ| | | | ٹ| | |