<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[飞梦者 Flymz]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[最少的代码，写出最好的程序。]]></description>
<link>http://hi.baidu.com/flymz</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[jigloo 注册]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/d700fc035df72281d53f7cdd.html]]></link>
        <description><![CDATA[
		
		<p>jigloo 是一个Eclipse 开发RCP的图形界面工具（下载：<a href="http://www.cloudgarden.com/jigloo/index.html">http://www.cloudgarden.com/jigloo/index.html</a>），现在需要注册，下面是java注册程序</p>
<p> </p>
<p>此注册机可以用于最新的 Jigloo 4.1 版本.<br>
/**<br>
* The code is E81086713E446D36F62B2AA2A3502B5EB155.<br>
* <br>
* @author BeanSoft<br>
* <br>
*/<br>
public class JiglooKeyGen {<br>
&nbsp;&nbsp;&nbsp;  public JiglooKeyGen() {<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  String licStr = testString(&quot;Jigloo v3.0.0 Prof&quot;, &quot;GH6tfjUtf7&quot;);<br>
<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  System.out.println(licStr);<br>
&nbsp;&nbsp;&nbsp;  }<br>
<br>
&nbsp;&nbsp;&nbsp;  private static final String hex[] = { &quot;0&quot;, &quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;, &quot;5&quot;, &quot;6&quot;,<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &quot;7&quot;, &quot;8&quot;, &quot;9&quot;, &quot;A&quot;, &quot;B&quot;, &quot;C&quot;, &quot;D&quot;, &quot;E&quot;, &quot;F&quot; };<br>
<br>
&nbsp;&nbsp;&nbsp;  private String bytesToHex(byte bytes[]) {<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  String rep = &quot;&quot;;<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  for (int i = 0; i &lt; bytes.length; i++) {<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  int b = bytes[i];<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  if (b &lt; 0)<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  b += 256;<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  rep = rep + hex[b / 16] + hex[b % 16];<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  if (i % 20 == 19)<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  rep = rep + &quot;\n&quot;;<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }<br>
<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  return rep;<br>
&nbsp;&nbsp;&nbsp;  }<br>
<br>
&nbsp;&nbsp;&nbsp;  private String testString(String str, String key) {<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  byte en[] = test(str.getBytes(), key.getBytes());<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  return bytesToHex(en);<br>
&nbsp;&nbsp;&nbsp;  }<br>
<br>
&nbsp;&nbsp;&nbsp;  private byte[] test(byte data[], byte pass[]) {<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  return test1(test1(data, pass, false), pass, true);<br>
&nbsp;&nbsp;&nbsp;  }<br>
<br>
&nbsp;&nbsp;&nbsp;  private byte[] test1(byte data[], byte pass[], boolean rev) {<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  byte en[] = new byte[data.length];<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  System.arraycopy(data, 0, en, 0, data.length);<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  if (!rev) {<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  for (int i = 0; i &lt; en.length; i++) {<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  int j = i % pass.length;<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  if (i &gt; 0)<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  en[i] = (byte) (en[i] + en[i - 1] + pass[j]);<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  else<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  en[i] = (byte) (en[i] + pass[j]);<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }<br>
<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  } else {<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  for (int i = en.length - 1; i &gt;= 0; i--) {<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  int j = i % pass.length;<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  if (i != en.length - 1)<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  en[i] = (byte) (en[i + 1] + en[i] + pass[j]);<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  else<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  en[i] = (byte) (en[i] + pass[j]);<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }<br>
<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  return en;<br>
&nbsp;&nbsp;&nbsp;  }<br>
<br>
&nbsp;&nbsp;&nbsp;  /**<br>
&nbsp;&nbsp;&nbsp;  * @param args<br>
&nbsp;&nbsp;&nbsp;  */<br>
&nbsp;&nbsp;&nbsp;  public static void main(String[] args) {<br>
&nbsp;&nbsp;&nbsp;  &nbsp;&nbsp;&nbsp;  new JiglooKeyGen();<br>
&nbsp;&nbsp;&nbsp;  }<br>
<br>
}</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/%B9%A4%BE%DF%CA%B9%D3%C3">工具使用</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/d700fc035df72281d53f7cdd.html#comment">查看评论</a>]]></description>
        <pubDate>2009年09月06日 星期日  上午 11:57</pubDate>
        <category><![CDATA[工具使用]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/d700fc035df72281d53f7cdd.html</guid>
</item>

<item>
        <title><![CDATA[ANT条件判断[转]]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/8ad20708f06a2839e824883d.html]]></link>
        <description><![CDATA[
		
		<div>前段时间写Ant的时候用到了条件判读condition，找了一堆资料，现总结如下：</div>
<div><br>
1、istrue isfalse:断言真假<br>
&lt;project name=&quot;testCondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;test&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;condition property=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> &lt;istrue value=&quot;true&quot;/&gt; <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;/condition&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;<span href="tag.php?name=ant">ant</span>call target=&quot;isTrue&quot;&gt;&lt;/antcall&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;antcall target=&quot;isFalse&quot;&gt;&lt;/antcall&gt; <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isTrue&quot; if=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is ture&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isFalse&quot; unless=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is false&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
&lt;/project&gt;<br>
<br>
2、逻辑运算</div>
<div>2.1、not 逻辑非<br>
&lt;project name=&quot;testCondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;test&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;condition property=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> ＜not&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;istrue value=&quot;true&quot;/&gt; <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> &lt;/not&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;/condition&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;antcall target=&quot;isTrue&quot;&gt;&lt;/antcall&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;antcall target=&quot;isFalse&quot;&gt;&lt;/antcall&gt; <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isTrue&quot; if=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is ture&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isFalse&quot; unless=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is false&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
&lt;/project&gt;</div>
<div><br>
2.2、and 逻辑与<br>
&lt;project name=&quot;testCondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;test&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;condition property=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> ＜and&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;istrue value=&quot;true&quot;/&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;istrue value=&quot;false&quot;/&gt; <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> &lt;/and&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;/condition&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;antcall target=&quot;isTrue&quot;&gt;&lt;/antcall&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;antcall target=&quot;isFalse&quot;&gt;&lt;/antcall&gt; <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isTrue&quot; if=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is ture&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isFalse&quot; unless=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is false&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
&lt;/project&gt;</div>
<div>2.3、or 逻辑或 xor异或 (语法上与and类似)<br>
<br>
3、available 是否可用<br>
&lt;project name=&quot;testCondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;path id=&quot;all.test.classes&quot;&gt; <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;pathelement location=&quot;bin&quot;/&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/path&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;test&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;condition property=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> &lt;!--在指定的classpath路径下是否存在资源 TestTest.class--&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> &lt;available resource=&quot;TestTest.class&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;classpath refid=&quot;all.test.classes&quot; /&gt; <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> &lt;/available&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;/condition&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;antcall target=&quot;isTrue&quot;&gt;&lt;/antcall&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;antcall target=&quot;isFalse&quot;&gt;&lt;/antcall&gt; <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isTrue&quot; if=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is ture&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isFalse&quot; unless=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is false&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
&lt;/project&gt;<br>
<br>
4、isset 指定属性是否存在<br>
&lt;project name=&quot;testCondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;!--属性也可以通过ant参数-D来设置--&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;property name=&quot;name&quot; value=&quot;this is name&quot;/&gt; <wbr></wbr> <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;test&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;condition property=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> &lt;!--如果属性name不存在则返回false--&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> &lt;isset property=&quot;name&quot;/&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;/condition&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;antcall target=&quot;isTrue&quot;&gt;&lt;/antcall&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;antcall target=&quot;isFalse&quot;&gt;&lt;/antcall&gt; <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isTrue&quot; if=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is ture&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isFalse&quot; unless=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is false&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
&lt;/project&gt;<br>
<br>
5、equals 是否相等<br>
&lt;project name=&quot;testCondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;!--属性也可以通过ant参数-D来设置--&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;property name=&quot;name&quot; value=&quot;this is name&quot;/&gt; <wbr></wbr> <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;test&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;condition property=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> &lt;!--如果arg1的值与arg2的值相等返回true，否则为false--&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> &lt;equals arg1=&quot;${name}&quot; arg2=&quot;this is name&quot;/&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;/condition&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;antcall target=&quot;isTrue&quot;&gt;&lt;/antcall&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;antcall target=&quot;isFalse&quot;&gt;&lt;/antcall&gt; <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isTrue&quot; if=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is ture&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isFalse&quot; unless=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is false&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
&lt;/project&gt; <wbr></wbr> <wbr></wbr><br>
<br>
6、filesmatch 比较文件<br>
&lt;project name=&quot;testCondition&quot;&gt; <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;test&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;condition property=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> &lt;!--如果file1所代表的文件与file2所代表的文件相等返回true，否则为false--&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> &lt;filesmatch file1=&quot;testfile1.txt&quot; file2=&quot;testfile2.txt&quot;/&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;/condition&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;antcall target=&quot;isTrue&quot;&gt;&lt;/antcall&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;antcall target=&quot;isFalse&quot;&gt;&lt;/antcall&gt; <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr><br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isTrue&quot; if=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is ture&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;target name=&quot;isFalse&quot; unless=&quot;scondition&quot;&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr> <wbr></wbr>  <wbr></wbr>&lt;echo&gt;is false&lt;/echo&gt;<br>
 <wbr></wbr>  <wbr></wbr> <wbr></wbr> <wbr></wbr>&lt;/target&gt;<br>
&lt;/project&gt;</div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/Ant">Ant</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/8ad20708f06a2839e824883d.html#comment">查看评论</a>]]></description>
        <pubDate>2009年07月03日 星期五  下午 03:57</pubDate>
        <category><![CDATA[Ant]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/8ad20708f06a2839e824883d.html</guid>
</item>

<item>
        <title><![CDATA[ant 核心任务【转】]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/04c55343cbb09b189213c62c.html]]></link>
        <description><![CDATA[
		
		<div class="tit">Ant的核心任务</div>
<table style="table-layout: fixed" class="FCK__ShowTableBorders">
    <tbody>
        <tr>
            <td>
            <div class="cnt">
            <p>一、ant 调用另一个构建文件中的任务。</p>
            <p>如果不指定antfile，则缺省为build.xml。<br>
            &nbsp;&nbsp;  其格式一般为:<br>
            &lt;target name=&quot;testant&quot;&gt;<br>
            &nbsp;&nbsp;  &lt;ant antfile=&quot;buildInternal.xml&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  dir=&quot;builddir&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  inheritall=&quot;true&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  inheritrefs=&quot;true&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  target=&quot;testant&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &gt;<br>
            &nbsp;&nbsp;&nbsp;  &lt;reference refid=&quot;filter.set&quot; torefid=&quot;NewFilter&quot;/&gt;<br>
            &nbsp;&nbsp;  &lt;/ant&gt;<br>
            &lt;/target&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;  antfile表示子项目的构建文件。<br>
            <br>
            &nbsp;&nbsp;&nbsp;  dir表示构建文件所再的目录，缺省为当前目录。</p>
            <p>&nbsp;&nbsp;&nbsp;  inheritall表示父项目的所有属性在子项目中都可使用，并覆盖子项目中的同名属性。缺省为true。<br>
            &nbsp;&nbsp;<br>
            &nbsp;&nbsp;&nbsp;  inheritrefs表示父项目中的所有引用在子项目中都可以使用，并且不覆盖子项目中的同名引用。缺省为false。<br>
            如果在ant任务中显示的定义引用，如上例&lt;reference refid=&quot;filter.set&quot;&gt;则该引用将会覆盖子项目中的同名引用。<br>
            &nbsp;&nbsp;&nbsp;<br>
            target表示所要运行的子项目中的target，如果不写则为缺省target。</p>
            <p>二、antcall调用当前构建文件的另一个任务。</p>
            <p>注意，不一定是同一个项目。也就是说，同一个构建文件可能包含多个项目，其余的项目可以通过import构建文件来获得。<br>
            &nbsp;&nbsp;&nbsp;<br>
            其使用和ant有些类似。<br>
            &nbsp;&nbsp;&nbsp;<br>
            格式为：<br>
            &nbsp;&nbsp;  &lt;antcall target=&quot;testant2&quot;&nbsp;&nbsp;  inheritrefs=&quot;true&quot;&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;param name=&quot;newprop&quot; value=&quot;newvalue&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;reference refid=&quot;filter.set&quot; torefid=&quot;NewFilter&quot;/&gt;<br>
            &nbsp;&nbsp;  &lt;/antcall&gt;<br>
            &nbsp;&nbsp;&nbsp;<br>
            &nbsp;&nbsp;<br>
            param相当于传给新target的property。<br>
            &nbsp;&nbsp;<br>
            inheritrefs表示父项目中的所有引用在子项目中都可以使用，并且不覆盖子项目中的同名引用。缺省为false。如果在ant任务中显示的定义引用，如上例&lt;reference<br>
            refid=&quot;filter.set&quot;&gt;则该引用将会覆盖子项目中的同名引用。</p>
            <p>三、antstructure为当前的构建文件产生DTD，需指定output文件。但是产生的DTD文件并不完整。</p>
            <p>四、apply继承自exec，接受文件集作为其输入。</p>
            <p>五、apt注释处理器</p>
            <p>六、Available判断某个类，或某个文件，或某个路径。如果存在，则设置某个property。<br>
            &nbsp;&nbsp;&nbsp;<br>
            其格式如下:<br>
            &nbsp;&nbsp;&nbsp;  判断某个类是否存在<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;available&nbsp;&nbsp;  property =&quot;resource.exists&quot;&nbsp;&nbsp;&nbsp;  classname =&quot;package1.test1&quot;&nbsp;&nbsp;&nbsp;  classpath =&quot;dist/project1.jar&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;  判断某个文件是否存在<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;available&nbsp;&nbsp;  property =&quot;resource.exists1&quot;&nbsp;&nbsp;&nbsp;  file = &quot;src/test.txt&quot;&nbsp;&nbsp;&nbsp;  type= &quot;file&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;  判断某个资源是否存在<br>
            &lt;available&nbsp;&nbsp;&nbsp;  property =&quot;resource.exists2&quot;&nbsp;&nbsp;  resource=&quot;package1/test2.class&quot;&nbsp;&nbsp;  classpath=&quot;dist/project1.jar&quot;/&gt;</p>
            <p>七、basename相当于定义了一个property，其值为一个文件的名称。</p>
            <p>如果文件是在某个路径中的，则只会读取文件的名字，同时也可以通过suffix来去掉文件的后缀。<br>
            &nbsp;&nbsp;<br>
            如果文件是一个目录，则会读取目录的最后一项。例如d:/program<br>
            files/mydirectory.则只会截取mydirectory。<br>
            &nbsp;&nbsp;&nbsp;<br>
            例子：<br>
            &nbsp;&nbsp;&nbsp;  &lt;target&nbsp;&nbsp;&nbsp;  name=&quot;testbasename&quot;&gt;<br>
            &lt;basename property=&quot;basefile&quot;&nbsp;&nbsp;  file=&quot;d:/personal/java/ant/testfile.txt&quot; suffix=&quot;txt&quot;/&gt;<br>
            &lt;if&gt;&lt;isset property=&quot;basefile&quot;/&gt;<br>
            &nbsp;&nbsp;  &lt;then&gt;<br>
            &nbsp;&nbsp;  &lt;echo&gt;the basename is set${basefile}&lt;/echo&gt;<br>
            &nbsp;&nbsp;  &lt;/then&gt;<br>
            &lt;else&gt;<br>
            &nbsp;&nbsp;  &lt;echo&gt;the basename is notset&lt;/echo&gt;<br>
            &lt;/else&gt;<br>
            &lt;/if&gt;<br>
            &nbsp;&nbsp;  &lt;/target&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;  实际的输出将是：[echo] the basename is set testfile<br>
            &nbsp;&nbsp;&nbsp;  实际上只是一个字符串处理过程，文件不存在也同样会设置property。</p>
            <p>八、buildnumber只有一个属性，file。<br>
            &nbsp;&nbsp;<br>
            其功能是，向指定文件中写入一个属性build.number，初始化的时候build.number=1。<br>
            &nbsp;&nbsp;&nbsp;  如果文件中已经有<br>
            &nbsp;&nbsp;&nbsp;<br>
            build.number=...<br>
            &nbsp;&nbsp;&nbsp;<br>
            则读取build.number，并在原来的数值的基础上加1，并写回文件。<br>
            &nbsp;&nbsp;&nbsp;<br>
            最后，build.number的值必须为整形。</p>
            <p>九、GUnzip/BUnzip2，Gzip/Bzip2</p>
            <p>&nbsp;&nbsp;&nbsp;  .gz以及.bz2文件的解压缩任务。<br>
            &nbsp;&nbsp;&nbsp;  将文件打包成.gz<br>
            ,.bz2文件</p>
            <p>十、chmod－－unix环境下改变文件的访问权限。</p>
            <p>十一、concat－－把一组文件合并成一个文件。这个任务支持嵌套文本，如果有的话附加在文件后面。例子：<br>
            &nbsp;&nbsp;&nbsp;<br>
            &nbsp;&nbsp;  &lt;concat destfile=&quot;NOTES.txt&quot;<br>
            append=&quot;false&quot;&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;filelist<br>
            dir=&quot;notes&quot; files=&quot;note1.txt,note2.txt&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;fileset<br>
            dir=&quot;notes2&quot; includes=&quot;**/note*.txt&quot;/&gt;<br>
            &nbsp;&nbsp;  &lt;/concat&gt;<br>
            十二、condition－－有条件的设置属性。<br>
            例子：<br>
            &lt;condition property=&quot;osiswindows&quot;&gt;<br>
            &lt;and&gt;<br>
            &nbsp;&nbsp;&nbsp;  &lt;os<br>
            family=&quot;windows&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;  &lt;not&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;os family=&quot;unix&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;  &lt;/not&gt;<br>
            &lt;/and&gt;<br>
            &lt;/condition&gt;<br>
            十三、copy<br>
            &nbsp;&nbsp;&nbsp;  复制一个文件或目录<br>
            十四、delete<br>
            &nbsp;&nbsp;<br>
            删除一个文件或目录，或删除根据fileset定义的文件集合<br>
            十五、dependset<br>
            &nbsp;&nbsp;<br>
            检查和删除过时的目的文件。<br>
            &nbsp;&nbsp;<br>
            比较srcfilelist,srcfileset中的文件和targetfilelist,<br>
            targetfileset中的所有文件，如果在源目录中有文件比目标目录中的文件新，则删除目标目录中的所有文件。<br>
            十六、dirname<br>
            <br>
            和basename正好相反，获取文件或目录所在的路径。<br>
            &nbsp;&nbsp;  例子：<br>
            &nbsp;&nbsp;&nbsp;  &lt;target<br>
            name=&quot;testdirname&quot;&gt;<br>
            &lt;dirname file=&quot;src/package1/test1.java&quot;<br>
            property=&quot;testdir&quot;/&gt;<br>
            &lt;echo&gt;${testdir}&lt;/echo&gt;<br>
            &lt;/target&gt;<br>
            &nbsp;&nbsp;  将返回：<br>
            D:\personal\java\ant\src\package1<br>
            十七、ear<br>
            &nbsp;&nbsp;  创建ear文件，例子：<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;ear<br>
            destfile=&quot;build/myapp.ear&quot;<br>
            appxml=&quot;src/metadata/application.xml&quot;&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;fileset dir=&quot;build&quot; includes=&quot;*.jar,*.war&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;<br>
            &lt;/ear&gt;<br>
            十八、echo<br>
            &nbsp;&nbsp;&nbsp;  &lt;echo<br>
            message=&quot;Deleting drive C:&quot; level=&quot;debug&quot;/&gt;<br>
            &nbsp;&nbsp;<br>
            只有debug模式的时候这条message才会显示<br>
            十九、exec执行本地程序。<br>
            二十、fail－－退出当前构建，例子：<br>
            &nbsp;&nbsp;&nbsp;<br>
            &lt;fail&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;condition&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;not&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;isset property=&quot;thisdoesnotexist&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;/not&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;/condition&gt;<br>
            &nbsp;&nbsp;&nbsp;  &lt;/fail&gt;<br>
            二十一、filter－－创建一个全局的filter，要谨慎定义filter。<br>
            &nbsp;&nbsp;  例子：<br>
            &nbsp;&nbsp;&nbsp;<br>
            &lt;filter token=&quot;year&quot; value=&quot;2000&quot;/&gt;<br>
            &nbsp;&nbsp;  &lt;copy todir=&quot;${dest.dir}&quot;<br>
            filtering=&quot;true&quot;&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;fileset<br>
            dir=&quot;src&quot;/&gt;<br>
            &nbsp;&nbsp;  &lt;/copy&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;<br>
            所有的目标文件都会采用到上面定义的filter<br>
            二十二、FixCRLF<br>
            &nbsp;&nbsp;<br>
            转换文本文件为本地约定的格式，同时修复因&ldquo;错误配置的编辑器或者文件转换程序&rdquo;而损坏的文本文件。<br>
            <br>
            二十三、genkey<br>
            二十四、get<br>
            &nbsp;&nbsp;<br>
            从url获取文件。例子：<br>
            二十五、import<br>
            &nbsp;&nbsp;&nbsp;  导入新的构建文件<br>
            二十六、input<br>
            &nbsp;&nbsp;&nbsp;<br>
            接受用户控制台输入，例子：<br>
            &nbsp;&nbsp;&nbsp;&nbsp;<br>
            &nbsp;&nbsp;  &lt;input<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  message=&quot;All<br>
            data is going to be deleted from DB continue (y/n)?&quot;<br>
            &nbsp;&nbsp;&nbsp;<br>
            validargs=&quot;y,n&quot;<br>
            &nbsp;&nbsp;&nbsp;<br>
            addproperty=&quot;do.delete&quot;<br>
            &nbsp;&nbsp;  /&gt;<br>
            &nbsp;&nbsp;  &lt;condition property=&quot;do.abort&quot;&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;equals<br>
            arg1=&quot;n&quot; arg2=&quot;${do.delete}&quot;/&gt;<br>
            &nbsp;&nbsp;  &lt;/condition&gt;<br>
            &nbsp;&nbsp;  &lt;fail if=&quot;do.abort&quot;&gt;Build aborted by<br>
            user.&lt;/fail&gt;<br>
            &nbsp;&nbsp;<br>
            validargs表示用户只能输入y或者n，用户如果输入n，则do.delete=&quot;n&quot;<br>
            二十七、jar－－文件打包成jar文件。<br>
            二十八、java－－运行java程序<br>
            二十九、javac－－编译java文件。<br>
            三十、Javadoc/Javadoc2<br>
            &nbsp;&nbsp;&nbsp;<br>
            产生html文档<br>
            &nbsp;&nbsp;&nbsp;<br>
            例子：<br>
            &nbsp;&nbsp;&nbsp;<br>
            &nbsp;&nbsp;  &lt;javadoc packagenames=&quot;package1.*&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            sourcepath=&quot;src&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            destdir=&quot;docs/api&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            author=&quot;true&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            version=&quot;true&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            use=&quot;true&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            windowtitle=&quot;Test API&quot;/&gt;<br>
            三十一、length<br>
            例子：<br>
            &lt;length string=&quot;foo&quot; property=&quot;length.foo&quot; /&gt;<br>
            三十二、LoadFile－－将全部的文本文件载入到单个特性，xml文件或txt文件<br>
            &nbsp;&nbsp;  例子：<br>
            &lt;loadfile srcfile=&quot;NOTES.txt&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            property=&quot;load.file&quot;/&gt;<br>
            &lt;echo&gt;${load.file}&lt;/echo&gt;<br>
            输出 将会是文本文件的所有内容<br>
            三十三、loadproperties<br>
            &nbsp;&nbsp;&nbsp;  load property文件。<br>
            &nbsp;&nbsp;  例子：<br>
            &nbsp;&nbsp;&nbsp;<br>
            &lt;loadproperties srcFile=&quot;file.properties&quot;&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;filterchain&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;linecontains&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;contains value=&quot;import.&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;/linecontains&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;/filterchain&gt;<br>
            &nbsp;&nbsp;&nbsp;<br>
            &lt;/loadproperties&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;<br>
            &lt;loadproperties&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;gzipresource&gt;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;url<br>
            url=&quot;<a href="http://example.org/url.properties.gz%22/">http://example.org/url.properties.gz&quot;/</a>&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;/gzipresource&gt;<br>
            &nbsp;&nbsp;&nbsp;<br>
            &lt;/loadproperties&gt;<br>
            <br>
            <br>
            insert<br>
            一、macrodef<br>
            &nbsp;&nbsp;<br>
            和任务定义差不多，相当于定义了一个函数，函数的参数用attribute来指定，函数的名字用element来指定。<br>
            &nbsp;&nbsp;<br>
            当调用该任务的时候，象调用函数一样，需传入参数。<br>
            <br>
            &nbsp;&nbsp;&nbsp;  例子：</p>
            <p>&lt;macrodef name=&quot;test&quot;&gt;<br>
            &nbsp;&nbsp;&nbsp;  &lt;attribute name=&quot;one&quot;/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &nbsp;&nbsp;&nbsp;  &lt;attribute name=&quot;two&quot; default=&quot;@{one}&quot;/&gt;&nbsp;&nbsp;&nbsp;&nbsp;</p>
            <p>&nbsp;&nbsp;&nbsp;  &lt;sequential&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;echo&gt;one=@{one}&nbsp;&nbsp;&nbsp;<a href="mailto:two=@%7Btwo%7D%3C/echo">two=@{two}&lt;/echo</a>&gt;<br>
            &nbsp;&nbsp;&nbsp;  &lt;/sequential&gt;<br>
            &lt;/macrodef&gt;<br>
            &lt;test one=&quot;test&quot;/&gt;</p>
            <p> </p>
            <p>三十五、mail－－A task to send SMTP email. 发送SMTPemail</p>
            <p>&nbsp;&nbsp;&nbsp;  例子：<br>
            &nbsp;&nbsp;&nbsp;  &lt;mail<br>
            mailhost=&quot;<a href="mailto:somehost@xyz.com">somehost@xyz.com</a>&quot; mailport=&quot;25&quot; subject=&quot;Test<br>
            build&quot;&nbsp;&nbsp;  charset=&quot;utf-8&quot;&gt;<br>
            &nbsp;&nbsp;  &lt;from address=&quot;<a href="mailto:me@myist.com%22/">me@myist.com&quot;/</a>&gt;<br>
            &nbsp;&nbsp;  &lt;to address=&quot;<a href="mailto:all@xyz.com%22/">all@xyz.com&quot;/</a>&gt;<br>
            &nbsp;&nbsp;  &lt;message&gt;some international<br>
            text:${line2}&lt;/message&gt;<br>
            &lt;/mail&gt;<br>
            &nbsp;&nbsp;&nbsp;<br>
            三十六、Manifest<br>
            <br>
            建立一个清单文件，他将放入某个jar，作为jar文件的说明书。其中，在清单文件可以指定jar文件的main－class，jar文件将可以直接运行。例子：<br>
            &nbsp;&nbsp;  &lt;manifest &gt;<br>
            &nbsp;&nbsp;&nbsp;  &lt;attribute name=&quot;Built-By&quot;<br>
            value=&quot;LANLAN&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;  &lt;attribute<br>
            name=&quot;Main-Class&quot; value=&quot;package1.test2&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;  &lt;section<br>
            name=&quot;common&quot;&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;attribute name=&quot;Specification-Title&quot; value=&quot;Example&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;attribute name=&quot;Specification-Version&quot; value=&quot;1.0&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;attribute name=&quot;Specification-Vendor&quot; value=&quot;Example<br>
            Organization&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;attribute name=&quot;Implementation-Title&quot; value=&quot;common&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;attribute name=&quot;Implementation-Version&quot; value=&quot;1.0 December 13<br>
            2006&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;attribute name=&quot;Implementation-Vendor&quot; value=&quot;Example<br>
            Corp.&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;  &lt;/section&gt;<br>
            &lt;/manifest&gt;<br>
            <br>
            三十七、Mkdir<br>
            创建目录，例子：<br>
            &nbsp;&nbsp;&nbsp;  &lt;mkdir<br>
            dir=&quot;${dist}/lib&quot;/&gt;<br>
            <br>
            三十八、move<br>
            <br>
            将文件移动到另一个目录，或将文件集移动到另一个目录。例子：<br>
            <br>
            &nbsp;&nbsp;&nbsp;<br>
            &lt;move todir=&quot;new/dir/to/move/to&quot;&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;fileset<br>
            dir=&quot;src/dir&quot;/&gt;<br>
            &nbsp;&nbsp;  &lt;/move&gt;<br>
            <br>
            三十九、parallel<br>
            在分开的线程中执行所包含的任务，全部完成后再继续运行。在这个任务中可以包含任何ant任务。</p>
            <p>四十、patch－－通过一个diff文件对某个文件打补丁；要求补丁位于执行路径上。<br>
            &nbsp;&nbsp;&nbsp;  例子：<br>
            &nbsp;&nbsp;&nbsp;<br>
            &lt;patch patchfile=&quot;module.1.0-1.1.patch&quot;/&gt;<br>
            <br>
            四十一、pathconvert<br>
            &nbsp;&nbsp;<br>
            把路径和classpath信息转换成指定的目标的os形式。<br>
            &nbsp;&nbsp;  例子：<br>
            <br>
            &nbsp;&nbsp;&nbsp;<br>
            &lt;pathconvert targetos=&quot;unix&quot; property=&quot;jboss_unix.path&quot;<br>
            refid=&quot;jboss_classpath&quot;&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;map from=&quot;c:&quot; to=&quot;/home&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;<br>
            &lt;/pathconvert&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;echo<br>
            message=&quot;${jboss_unix.path}&quot; /&gt;<br>
            <br>
            四十二、Property<br>
            <br>
            四十三、record<br>
            &nbsp;&nbsp;&nbsp;<br>
            向当前的构建过程添加一个监听者，把输出记录到文件<br>
            &nbsp;&nbsp;&nbsp;  例子：</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;record name=&quot;log.txt&quot; action=&quot;start&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;javac ...<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;record name=&quot;log.txt&quot; action=&quot;stop&quot;/&gt;<br>
            四十四、replace<br>
            <br>
            用给定值替换指定文件中所有出现一个或者多个token的地方<br>
            例子：<br>
            &nbsp;&nbsp;&nbsp;  &lt;replace<br>
            file=&quot;index.xml&quot; token=&quot;@@@&quot; value=&quot;wombat&quot;/&gt;<br>
            <br>
            四十五、rmic<br>
            &nbsp;&nbsp;<br>
            编译远程rmi文件，产生stub以及skeleton文件。</p>
            <p>四十六、依次序执行所有嵌套任务的容器任务，在parallel中非常有用<br>
            四十七、signjar<br>
            &nbsp;&nbsp;<br>
            对jar文件进行数字签名。首先需要用genkey产生keystore例子</p>
            <p>&lt;genkey alias=&quot;key1&quot; storepass=&quot;secret&quot; keystore=&quot;myfirstkey&quot;&gt;<br>
            &nbsp;&nbsp;  &lt;dname&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;param name=&quot;CN&quot; value=&quot;ant test&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;param name=&quot;OU&quot; value=&quot;aaa&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;param name=&quot;O&quot;&nbsp;&nbsp;  value=&quot;bbb&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;param name=&quot;C&quot;&nbsp;&nbsp;  value=&quot;CN&quot;/&gt;<br>
            &nbsp;&nbsp;  &lt;/dname&gt;<br>
            &lt;/genkey&gt;</p>
            <p>&lt;signjar<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  alias=&quot;key1&quot;<br>
            keystore=&quot;myfirstkey&quot;<br>
            &nbsp;&nbsp;&nbsp;<br>
            storepass=&quot;secret&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;fileset<br>
            dir=&quot;dist&quot; includes=&quot;**/*.jar&quot; /&gt;<br>
            &lt;/signjar&gt;<br>
            四十八、sleep<br>
            休息或暂停一段时间，例子：<br>
            &lt;sleep<br>
            milliseconds=&quot;10&quot;/&gt;&nbsp;&nbsp;<br>
            四十九、sql</p>
            <p>对使用jdbc的数据库执行一系列的SQL语句。可以采用文本文件包含sql命令</p>
            <p>&lt;sql&nbsp;&nbsp;&nbsp;&nbsp;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            driver=&quot;oracle.jdbc.driver.OracleDriver&quot;&nbsp;&nbsp;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            url=&quot;jdbc:oracle:thin:@ipaddress:1521:aliasname&quot;&nbsp;&nbsp;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            userid=&quot;user&quot;&nbsp;&nbsp;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            password=&quot;pwd&quot;&nbsp;&nbsp;&nbsp;&nbsp;</p>
            <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            onerror=&quot;continue&quot;&gt;&nbsp;&nbsp;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;fileset&nbsp;&nbsp;<br>
            dir=&quot;dist&quot;&gt;&nbsp;&nbsp;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;include&nbsp;&nbsp;<br>
            name=&quot;a.sql&quot;&nbsp;&nbsp;<br>
            /&gt;&nbsp;&nbsp;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;/fileset&gt; <br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            &lt;classpath location=&quot;dist/ojdbc.jar&quot;/&gt;<br>
            &nbsp;&nbsp;  &lt;/sql&gt;<br>
            五十、tar<br>
            &nbsp;&nbsp;  创建tar归档文件<br>
            &lt;tar destfile=&quot;dist/mytar.tar&quot;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
            basedir=&quot;src&quot;<br>
            /&gt;<br>
            <br>
            五十一、taskdef<br>
            <br>
            增加任务。任务是继承了org.apache.tools.ant.Task 的java类<br>
            &nbsp;&nbsp;  和typedef的功能类似<br>
            五十二、tempfile<br>
            <br>
            将一个临时文件的名字赋值给一个property<br>
            例子<br>
            &lt;tempfile property=&quot;temp.file&quot; prefix=&quot;temp&quot;/&gt;<br>
            此时文件名为temp*的文件将赋值给property<br>
            五十三、touch－－相当于unix的touch命令<br>
            五十四、tstamp<br>
            <br>
            设置特性为当前时间，或者与当前时间的偏移量<br>
            五十五、unjar，unwar，unzip解压缩文件</p>
            <p>五十六、uptodate<br>
            <br>
            如果指定的目标文件比源文件有更新的时间戳，设置给定的特性。<br>
            例子：<br>
            &nbsp;&nbsp;  &lt;uptodate<br>
            property=&quot;xmlBuild.notRequired&quot;&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;srcfiles<br>
            dir= &quot;${src}/xml&quot; includes=&quot;**/*.dtd&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;  &lt;mapper<br>
            type=&quot;merge&quot; to=&quot;${deploy}\xmlClasses.jar&quot;/&gt;<br>
            &nbsp;&nbsp;  &lt;/uptodate&gt;</p>
            <p>五十七、waitfor等待所包含的条件变为有效。</p>
            <p>例子：<br>
            &nbsp;&nbsp;&nbsp;  &lt;waitfor maxwait=&quot;30&quot;&nbsp;&nbsp;  maxwaitunit=&quot;second&quot;&gt;<br>
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;available file=&quot;errors.log&quot;/&gt;<br>
            &nbsp;&nbsp;&nbsp;  &lt;/waitfor&gt;<br>
            等待30妙，知道errors。log文件产生</p>
            <p>五十八、war打包成war，需指定web.xml</p>
            <p>五十九、xmlproperty从一个合法的xml文件中载入特性值，根据这个文件的元素和属性名称生成特性名称。</p>
            <p>六十、zip打包成zip文件。</p>
            </div>
            </td>
        </tr>
    </tbody>
</table> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/Ant">Ant</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/04c55343cbb09b189213c62c.html#comment">查看评论</a>]]></description>
        <pubDate>2009年06月28日 星期日  下午 03:34</pubDate>
        <category><![CDATA[Ant]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/04c55343cbb09b189213c62c.html</guid>
</item>

<item>
        <title><![CDATA[Flex的Resizable TitleWindow[转]]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/841276c6fedee7129c163d53.html]]></link>
        <description><![CDATA[
		
		<p><u><font color="#800080">Adobe的Flex在有些地方确实不尽如人意，比如前面提到的HTML嵌入式支持，而TitleWindow不支持&ldquo;缩放和调整大小&rdquo;也是很让人不爽，这种情况下只能外围扩展。</font></u></p>
<p><u><font color="#800080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  在很多实际应用中都需要Popup窗口，这个窗口一般都是TitleWindow，当然我们也希望其能够支持Resizable，min，max。</font></u></p>
<p><u><font color="#800080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  我之前一直是模拟Jove写的那个ResizeManager的自己写的一个ResizeTitleWindow，勉强可以使用。Jove那个ResizeManager可以从 <a href="http://www.adobe.com/cfusion/communityengine/index.cfm?event=showDetails&amp;loc=en_US&amp;postId=1685&amp;productId=2">http://www.adobe.com/cfusion/communityengine/index.cfm?event=showDetails&amp;loc=en_US&amp;postId=1685&amp;productId=2</a> 这个地址获取，有源码和样例可供参考。一般来讲直接使用ResizeManager来操作就可以了，但我这边还需要对一些额外事件多监听和处理，所以不得不改写它。</font></u></p>
<p><u><font color="#800080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  前些日子，又看了看FlexLib（<a href="http://flexlib.googlecode.com/">http://flexlib.googlecode.com</a>）的MDI Window组件。MDI Window功能很cool，不过不支持模态。另外就是&ldquo;侵入性&rdquo;太强，其必须在一个MDI Canvas画布中，并被MDI Manager所管理。所以如果很简单使用（就像PopupManager简单弹出一个TitleWindow）那样使用，是不可能的了。</font></u></p>
<p><u><font color="#800080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  但MDI Window用于解决符合那种&ldquo;在一个控件内存在很多Panel&rdquo;的场景非常适合，也非常cool。</font></u></p>
<p><u><font color="#800080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  最近发现一个新的ResiableTitleWindow，比较好用，推荐一下。在<a href="http://www.adobe.com/cfusion/exchange/index.cfm?event=extensionDetail&amp;extid=1207017&amp;loc=en_us">http://www.adobe.com/cfusion/exchange/index.cfm?event=extensionDetail&amp;extid=1207017&amp;loc=en_us</a># 可以下载到。基本上直接引入就可以使用了。不过你们很多事件处理方式采用了private方法，所以建议大家改成protect，以便于扩展。</font></u></p>
<p><u><font color="#800080">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  如果你想实现不同的&ldquo;最大&rdquo;&ldquo;最小&rdquo;&ldquo;关闭&rdquo;按钮图标，也非常容易，只需要设置相应的css即可。在下载的样例中有详细的参考。</font></u></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/Flex">Flex</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/841276c6fedee7129c163d53.html#comment">查看评论</a>]]></description>
        <pubDate>2009年06月28日 星期日  下午 03:05</pubDate>
        <category><![CDATA[Flex]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/841276c6fedee7129c163d53.html</guid>
</item>

<item>
        <title><![CDATA[tar、gzip、unzip命令的周详使用方法[转]]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/4f48c9ea32d611dad439c97a.html]]></link>
        <description><![CDATA[
		
		tar命令<br>
tar能为文件和目录创建档案。利用tar，用户能为某一特定文件创建档案（备份文件），也能在档案中改动文件，或向档案中加入新的文件。tar最初被用来在磁带上创建档案，目前，用户能在所有设备上创建档案，如软盘。利用tar命令，能把一大堆的文件和目录全部打包成一个文件，这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。Linux上的tar是GNU版本的。<br>
语法：tar [主选项+辅选项] 文件或目录<br>
使用该命令时，主选项是必须要有的，他告诉tar要做什么事情，辅选项是辅助使用的，能选用。<br>
主选项：<br>
c 创建新的档案文件。如果用户想备份一个目录或是一些文件，就要选择这个选项。<br>
r 把要存档的文件追加到档案文件的未尾。例如用户已作好备份文件，又发现更有一个目录或是一些文件忘记备份了，这时能使用该选项，将忘记的目录或文件追加到备份文件中。<br>
t 列出档案文件的内容，查看已备份了哪些文件。<br>
u 更新文件。就是说，用新增的文件取代原备份文件，如果在备份文件中未找到要更新的文件，则把他追加到备份文件的最后。<br>
x 从档案文件中释放文件。<br>
辅助选项：<br>
b 该选项是为磁带机设定的。其后跟一数字，用来说明区块的大小，系统预设值为20（20*512 bytes）。<br>
f 使用档案文件或设备，这个选项通常是必选的。<br>
k 保存已存在的文件。例如我们把某个文件还原，在还原的过程中，遇见相同的文件，不会进行覆盖。<br>
m 在还原文件时，把所有文件的修改时间设定为目前。<br>
M 创建多卷的档案文件，以便在几个磁盘中存放。<br>
v 周详报告tar处理的文件信息。如无此选项，tar不报告文件信息。<br>
w 每一步都需求确认。<br>
z 用gzip来压缩/解压缩文件，加上该选项后能将档案文件进行压缩，但还原时也一定要使用该选项进行解压缩。 <br>
例1：把/home目录下包括他的子目录全部做备份文件，备份文件名为usr.tar。<br>
$ tar cvf usr.tar /home<br>
例2：把/home目录下包括他的子目录全部做备份文件，并进行压缩，备份文件名为usr.tar.gz 。<br>
$ tar czvf usr.tar.gz /home<br>
例3：把usr.tar.gz这个备份文件还原并解压缩。<br>
$ tar xzvf usr.tar.gz<br>
例4：查看usr.tar备份文件的内容，并以分屏方式显示在显示器上。<br>
$ tar tvf usr.tar | more<br>
要将文件备份到一个特定的设备，只需把设备名作为备份文件名。<br>
例5：用户在/dev/fd0设备的软盘中创建一个备份文件，并将/home 目录中所有的文件都拷贝到备份文件中。<br>
$ tar cf /dev/fd0 /home<br>
要恢复设备磁盘中的文件，可使用xf选项：<br>
$ tar xf /dev/fd0<br>
如果用户备份的文件大小超过设备可用的存贮空间，如软盘，你能创建一个多卷的tar备份文件。M选项指示tar命令提示你使用一个新的存贮设备，当使用M选项向一个软驱进行存档时，tar命令在一张软盘已满的时候会提醒你再放入一张新的软盘。这样你就能把tar档案存入几张磁盘中。<br>
$ tar cMf /dev/fd0 /home<br>
要恢复几张盘中的档案，只要将第一张放入软驱，然后输入有x和M选项的tar命令。在必要时你会被提醒放入另外一张软盘。<br>
$ tar xMf /dev/fd0gzip命令<br>
减少文件大小有两个明显的好处，一是能减少存储空间，二是通过网络传输文件时，能减少传输的时间。gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令，既方便又好用。<br>
语法：gzip [选项] 压缩（解压缩）的文件名<br>
各选项的含义：<br>
-c 将输出写到标准输出上，并保留原有文件。<br>
-d 将压缩文件解压。<br>
-l 对每个压缩文件，显示下列字段：<br>
压缩文件的大小<br>
未压缩文件的大小<br>
压缩比<br>
未压缩文件的名字<br>
-r 递归式地查找指定目录并压缩其中的所有文件或是解压缩。<br>
-t 测试，检查压缩文件是否完整。<br>
-v 对每一个压缩和解压的文件，显示文件名和压缩比。<br>
-num 用指定的数字num调整压缩的速度，-1或--fast表示最快压缩方法（低压缩比），-9或--best表示最慢压缩方法（高压缩比）。系统缺省值为6。<br>
假设一个目录/home下有文件mm.txt、sort.txt、xx.com。<br>
例1：把/home目录下的每个文件压缩成.gz文件。<br>
$ cd /home<br>
$ gzip *<br>
$ ls<br>
m.txt.gz sort.txt.gz xx.com.gz<br>
例2：把例1中每个压缩的文件解压，并列出周详的信息。<br>
$ gzip -dv *<br>
mm.txt.gz 43.1%-----replaced with mm.txt<br>
sort.txt.gz 43.1%-----replaced with sort.txt<br>
xx.com.gz 43.1%-----replaced with xx.com<br>
$ ls<br>
mm.txt sort.txt xx.com<br>
　<br>
例3：周详显示例1中每个压缩的文件的信息，并不解压。<br>
$ gzip -l *<br>
compressed uncompr. ratio uncompressed_name<br>
277 445 43.1% mm.txt<br>
278 445 43.1% sort.txt<br>
277 445 43.1% xx.com<br>
$ ls<br>
mm.txt.gz sort.txt.gz xx.com.gz<br>
例4：压缩一个tar备份文件，如usr.tar，此时压缩文件的扩展名为.tar.gz<br>
$ gzip usr.tar<br>
$ ls<br>
usr.tar.gzunzip命令<br>
用MS 视窗系统下的压缩软件winzip压缩的文件怎么在Linux系统下展开呢？能用unzip命令，该命令用于解扩展名为.zip的压缩文件。<br>
语法：unzip [选项] 压缩文件名.zip<br>
各选项的含义分别为：<br>
-x 文件列表 解压缩文件，但不包括指定的file文件。<br>
-v 查看压缩文件目录，但不解压。<br>
-t 测试文件有无损坏，但不解压。<br>
-d 目录 把压缩文件解到指定目录下。<br>
-z 只显示压缩文件的注解。<br>
-n 不覆盖已存在的文件。<br>
-o 覆盖已存在的文件且不需求用户确认。<br>
-j 不重建文件的目录结构，把所有文件解压到同一目录下。<br>
例1：将压缩文件text.zip在当前目录下解压缩。<br>
$ unzip text.zip<br>
　<br>
例2：将压缩文件text.zip在指定目录/tmp下解压缩，如果已有相同的文件存在，需求unzip命令不覆盖原先的文件。<br>
$ unzip -n text.zip -d /tmp<br>
　<br>
例3：查看压缩文件目录，但不解压。<br>
$ unzip -v text.zip<br>
zgrep命令<br>
这个命令的功能是在压缩文件中寻找匹配的正则表达式，用法和grep命令相同，只不过操作的对象是压缩文件。如果用户想看看在某个压缩文件中有没有某一句话，便可用zgrep命令。<br> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/linux%26%2347%3Bunix">linux&#47;unix</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/4f48c9ea32d611dad439c97a.html#comment">查看评论</a>]]></description>
        <pubDate>2009年06月27日 星期六  下午 05:51</pubDate>
        <category><![CDATA[linux&#47;unix]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/4f48c9ea32d611dad439c97a.html</guid>
</item>

<item>
        <title><![CDATA[Eclipse 中 将Java Project 转换为Dynamic Web Project(转)]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/489d34a82e4caeb8ca130cfd.html]]></link>
        <description><![CDATA[
		
		接手一个前期的Web项目，当时是用MyEclipse建立的，用MyEclipse发布运行没有任何问题。<br>
现在因为没有购买MyEclipse的年费，决定用EclipsE+WPT继续开发，没想到在WPT的Server中发现不了该项目，于是使用下面的方法将其转换为WPT能识别的项目。<br>
1. 修改项目的.project文件，保存，不记得是否需要重启Eclipse了。<br>
&nbsp;&nbsp;&nbsp;  在&lt;natures&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  …<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  &lt;/natures&gt;
<p>之间添加下列三行配置</p>
<p>&lt;nature&gt;org.<span class="hilite1">eclipse</span>.wst.common.project.facet.core.nature&lt;/nature&gt;<br>
&lt;nature&gt;org.<span class="hilite1">eclipse</span>.wst.common.modulecore.ModuleCoreNature&lt;/nature&gt;<br>
&lt;nature&gt;org.<span class="hilite1">eclipse</span>.jem.workbench.JavaEMFNature&lt;/nature&gt;</p>
<p>2. 在Eclipse中打开&ldquo;project properties&quot;，会看到新增了很多选择项，点中&quot;Project Facets&quot;,按下图配置：</p>
<p><img src="http://www.blogjava.net/images/blogjava_net/vcok/convert2Web.jpg" width="814" height="651"></p>
<p>3. 项目即可成为一个被WPT识别的项目。</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/%B9%A4%BE%DF%CA%B9%D3%C3">工具使用</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/489d34a82e4caeb8ca130cfd.html#comment">查看评论</a>]]></description>
        <pubDate>2009年06月26日 星期五  下午 01:41</pubDate>
        <category><![CDATA[工具使用]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/489d34a82e4caeb8ca130cfd.html</guid>
</item>

<item>
        <title><![CDATA[【转】Java事务处理总结]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/ec21d1001b46d416738b658f.html]]></link>
        <description><![CDATA[
		
		<p><br>
<strong><font color="#ff0000">一、什么是Java事务</font></strong></p>
<p>通常的观念认为，事务仅与数据库相关。</p>
<p>事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性（atomicity）、一致性（consistency）、隔离性（isolation）和持久性（durability）的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时，所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改，在事务提交之前对其他事务不可见。持久性表示已提交的数据在事务执行失败时，数据的状态都应该正确。</p>
<p>通俗的理解，事务是一组原子操作单元，从数据库角度说，就是一组SQL指令，要么全部执行成功，若因为某个原因其中一条指令执行有错误，则撤销先前执行过的所有指令。更简答的说就是：要么全部执行成功，要么撤销不执行。</p>
<p>既然事务的概念从数据库而来，那Java事务是什么？之间有什么联系？</p>
<p>实际上，一个Java应用系统，如果要操作数据库，则通过JDBC来实现的。增加、修改、删除都是通过相应方法间接来实现的，事务的控制也相应转移到Java程序代码中。因此，数据库操作的事务习惯上就称为Java事务。</p>
<p><strong><font color="#ff0000">二、为什么需要事务</font></strong></p>
<p>事务是为解决数据安全操作提出的，事务控制实际上就是控制数据的安全访问。具一个简单例子：比如银行转帐业务，账户A要将自己账户上的1000元转到B账户下面，A账户余额首先要减去1000元，然后B账户要增加1000元。假如在中间网络出现了问题，A账户减去1000元已经结束，B因为网络中断而操作失败，那么整个业务失败，必须做出控制，要求A账户转帐业务撤销。这才能保证业务的正确性，完成这个操走就需要事务，将A账户资金减少和B账户资金增加方到一个事务里面，要么全部执行成功，要么操作全部撤销，这样就保持了数据的安全性。</p>
<p><strong><font color="#ff0000">三、Java事务的类型</font></strong></p>
<p>Java事务的类型有三种：JDBC事务、JTA(Java Transaction API)事务、容器事务。</p>
<p>1、JDBC事务</p>
<p>JDBC 事务是用 Connection 对象控制的。JDBC Connection 接口( java.sql.Connection )提供了两种事务模式：自动提交和手工提交。 java.sql.Connection 提供了以下控制事务的方法：</p>
<p>public void setAutoCommit(boolean)<br>
public boolean getAutoCommit()<br>
public void commit()<br>
public void rollback()</p>
<p>使用 JDBC 事务界定时，您可以将多个 SQL 语句结合到一个事务中。JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。</p>
<p>2、JTA(Java Transaction API)事务</p>
<p>JTA是一种高层的，与实现无关的，与协议无关的API，应用程序和应用服务器可以使用JTA来访问事务。</p>
<p>JTA允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据，这些数据可以分布在多个数据库上。JDBC驱动程序的JTA支持极大地增强了数据访问能力。</p>
<p>如果计划用 JTA 界定事务，那么就需要有一个实现 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 接口的 JDBC 驱动程序。一个实现了这些接口的驱动程序将可以参与 JTA 事务。一个 XADataSource 对象就是一个 XAConnection 对象的工厂。 XAConnection s 是参与 JTA 事务的 JDBC 连接。</p>
<p>您将需要用应用服务器的管理工具设置 XADataSource 。从应用服务器和 JDBC 驱动程序的文档中可以了解到相关的指导。</p>
<p>J2EE 应用程序用 JNDI 查询数据源。一旦应用程序找到了数据源对象，它就调用 javax.sql.DataSource.getConnection() 以获得到数据库的连接。</p>
<p>XA 连接与非 XA 连接不同。一定要记住 XA 连接参与了 JTA 事务。这意味着 XA 连接不支持 JDBC 的自动提交功能。同时，应用程序一定不要对 XA 连接调用 java.sql.Connection.commit() 或者 java.sql.Connection.rollback() 。相反，应用程序应该使用 UserTransaction.begin()、 UserTransaction.commit() 和 serTransaction.rollback() 。</p>
<p><br>
3、容器事务</p>
<p>容器事务主要是J2EE应用服务器提供的，容器事务大多是基于JTA完成，这是一个基于JNDI的，相当复杂的API实现。相对编码实现JTA事务管理，我们可以通过EJB容器提供的容器事务管理机制（CMT）完成同一个功能，这项功能由J2EE应用服务器提供。这使得我们可以简单的指定将哪个方法加入事务，一旦指定，容器将负责事务管理任务。这是我们土建的解决方式，因为通过这种方式我们可以将事务代码排除在逻辑编码之外，同时将所有困难交给J2EE容器去解决。使用EJB CMT的另外一个好处就是程序员无需关心JTA API的编码，不过，理论上我们必须使用EJB。</p>
<p><strong><font color="#ff0000">四、三种事务差异</font></strong></p>
<p>1、JDBC事务控制的局限性在一个数据库连接内，但是其使用简单。</p>
<p>2、JTA事务的功能强大，事务可以跨越多个数据库或多个DAO，使用也比较复杂。</p>
<p>3、容器事务，主要指的是J2EE应用服务器提供的事务管理，局限于EJB应用使用。</p>
<p><br>
<strong><font color="#ff0000">五、总结</font></strong></p>
<p>事务控制是构建J2EE应用不可缺少的一部分，合理选择应用何种事务对整个应用系统来说至关重要。一般说来，在单个JDBC 连接连接的情况下可以选择JDBC事务，在跨多个连接或者数据库情况下，需要选择使用JTA事务，如果用到了EJB，则可以考虑使用EJB容器事务。</p>
<p>参考资料：<br>
《Pro Spring》<br>
<a href="http://www-128.ibm.com/developerworks/cn/java/j-dao/#6">http://www-128.ibm.com/developerworks/cn/java/j-dao/#6</a><br>
<a href="http://www.diybl.com/course/3_program/java/javashl/200726/10727_2.html">http://www.diybl.com/course/3_program/java/javashl/200726/10727_2.html</a></p>
<p>文章出处：<a href="http://www.diybl.com/course/3_program/java/javajs/200822/98419.html">http://www.diybl.com/course/3_program/java/javajs/200822/98419.html</a></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/java%CC%E2%D0%CD">java题型</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/ec21d1001b46d416738b658f.html#comment">查看评论</a>]]></description>
        <pubDate>2008年11月10日 星期一  上午 10:58</pubDate>
        <category><![CDATA[java题型]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/ec21d1001b46d416738b658f.html</guid>
</item>

<item>
        <title><![CDATA[80后程序员为薪水为什么这么低?]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/c6e60ef4a05abd69dcc474f7.html]]></link>
        <description><![CDATA[
		
		<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style=" mso-ascii- mso-hansi-">即使再优秀的程序员，刚毕业的时候的薪水与有多年职场经验的老手相比也会低些，这是非常正常的现象。但我们今天要讨论的是：薪水低这种情况为什么在</span><span>80</span><span style=" mso-ascii- mso-hansi-">后程序员群体中尤其突出？？</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span>80</span><span style=" mso-ascii- mso-hansi-">后程序员薪水偏低指的是：工作</span><span>3-5</span><span style=" mso-ascii- mso-hansi-">年后，仍不能得到与工作年限相称的薪酬回报！！</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style=" mso-ascii- mso-hansi-">程序员</span><span><a href="http://www.manaren.com/tag/200718212/"><span style=" mso-ascii- mso-hansi-"><span><font color="#333333">薪酬</font></span></span></a></span><span style=" mso-ascii- mso-hansi-">本质</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style=" mso-ascii- mso-hansi-">薪酬应该是社会对自己承认的一个标志。理论上，自己的价值越高，应该得到的回报也就越高。</span><span><a href="http://www.manaren.com/tag/200701175/"><span style=" mso-ascii- mso-hansi-"><span><font color="#333333">薪酬</font></span></span></a></span><span style=" mso-ascii- mso-hansi-">包括：薪水和福利。薪水是对我们当期劳动付出的认可，福利则保证我们无生活上的后顾之忧。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style=" mso-ascii- mso-hansi-">公司基于以下两点付劳动报酬给我们，其一是能力，其二是忠诚。对职场新人而言可能第一份报酬全部是因为自己的能力得到，然而随着我们在同一家服务年限的提高，公司为忠诚付给我们的报酬会越来越高（工龄工资的另一个定义），这是对忠诚的回报。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span><a href="http://www.manaren.com/tag/200701176/"><span style=" mso-ascii- mso-hansi-"><span><font color="#333333">薪酬</font></span></span></a></span><span style=" mso-ascii- mso-hansi-">人人关心。在每个阶段，每个人对工资、薪酬都会有不同的思考，这些思考源自我们对外界清醒和自身的清醒认真和判断。无论是大专、本科还是研究生，每个人毕业后都有一个薪水范围，走入社会</span><span>2</span><span style=" mso-ascii- mso-hansi-">年以后，薪水增长一般应在</span><span>30%</span><span style=" mso-ascii- mso-hansi-">&mdash;&mdash;</span><span>50%</span><span style=" mso-ascii- mso-hansi-">之间。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style=" mso-ascii- mso-hansi-">程序员的薪水以其为公司开发程序的多少和质量而定。有相当比例的</span><span>80</span><span style=" mso-ascii- mso-hansi-">后程序员毕业时达不到能马上进入</span><span><a href="http://www.manaren.com/tag/200701338/"><span style=" mso-ascii- mso-hansi-"><span><font color="#333333">项目</font></span></span></a></span><span style=" mso-ascii- mso-hansi-">的水平，需要公司进行在职</span><span><a href="http://www.manaren.com/tag/200701091/"><span style=" mso-ascii- mso-hansi-"><span><font color="#333333">培训</font></span></span></a></span><span style=" mso-ascii- mso-hansi-">（很可能又是教育的错），所以薪水不高。工作了几年之后，又因为总是跳来跳去的没有形成有效的积累，所以，薪水还是不高。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style=" mso-ascii- mso-hansi-">为什么偏是&ldquo;</span><span>80</span><span style=" mso-ascii- mso-hansi-">后&rdquo;薪水低？</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style=" mso-ascii- mso-hansi-">综合考查、结合与业内人士的沟通，无非因为以下几点。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style=" mso-ascii- mso-hansi-">专业基本知识一般，提前走入社会意识差</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style=" mso-ascii- mso-hansi-">计算机相关专业毕业现在多是企业招聘应届毕业生的最基本条件之一。我在多次面试应届生问及大学四年学到了什么时，总是听到类似的话：&ldquo;现在教育跟社会脱节很厉害，大学没学什么。还是要在企业里，才能接触实际项目。我现在还不能马上进入项目。&rdquo;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style=" mso-ascii- mso-hansi-">面对这种论调，</span><span><a href="http://www.manaren.com/tag/200718727/"><span style=" mso-ascii- mso-hansi-"><span><font color="#333333">企业</font></span></span></a></span><span style=" mso-ascii- mso-hansi-">一般会这么想：公司不是培训学校，还是请你练好了再来（这也是很多公司明确不要应届生的原因）。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style=" mso-ascii- mso-hansi-">当然，如果公司够大，候选人又足够聪明，还是有机会进入公司的，但薪水一般不会特别高。</span></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/%B4%B4%D2%B5%C0%F8%D6%BE">创业励志</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/c6e60ef4a05abd69dcc474f7.html#comment">查看评论</a>]]></description>
        <pubDate>2008年11月06日 星期四  上午 11:00</pubDate>
        <category><![CDATA[创业励志]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/c6e60ef4a05abd69dcc474f7.html</guid>
</item>

<item>
        <title><![CDATA[【转】通过一个实际的例子学习Oracle存储过程]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/6f1154e7bd75c328b83820cc.html]]></link>
        <description><![CDATA[
		
		<p><font face="Arial">--创建存储过程<br>
CREATE OR REPLACE PROCEDURE xxxxxxxxxxx_p<br>
(<br>
--参数IN表示输入参数，OUT表示输入参数，类型可以使用任意Oracle中的合法类型。<br>
 is_ym&nbsp;&nbsp; IN CHAR<br>
)<br>
AS<br>
--定义变量<br>
 vs_msg&nbsp;&nbsp;&nbsp; VARCHAR2(4000);&nbsp;&nbsp;&nbsp; --错误信息变量<br>
 vs_ym_beg&nbsp;&nbsp; CHAR(6);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --起始月份<br>
 vs_ym_end&nbsp;&nbsp; CHAR(6);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --终止月份<br>
 vs_ym_sn_beg CHAR(6);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --同期起始月份<br>
 vs_ym_sn_end CHAR(6);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --同期终止月份<br>
--定义游标(简单的说就是一个可以遍历的结果集)<br>
 CURSOR cur_1 IS<br>
 SELECT area_code,CMCODE,SUM(rmb_amt)/10000 rmb_amt_sn,SUM(usd_amt)/10000 usd_amt_sn<br>
 FROM BGD_AREA_CM_M_BASE_T<br>
&nbsp;&nbsp; WHERE ym &gt;= vs_ym_sn_beg<br>
&nbsp;&nbsp; AND ym &lt;= vs_ym_sn_end<br>
 GROUP BY area_code,CMCODE;</font></p>
<p><font face="Arial">BEGIN<br>
 --用输入参数给变量赋初值，用到了Oralce的SUBSTR TO_CHAR ADD_MONTHS TO_DATE 等很常用的函数。<br>
 vs_ym_beg := SUBSTR(is_ym,1,6);<br>
 vs_ym_end := SUBSTR(is_ym,7,6);<br>
 vs_ym_sn_beg := TO_CHAR(ADD_MONTHS(TO_DATE(vs_ym_beg,'yyyymm'), -12),'yyyymm');<br>
 vs_ym_sn_end := TO_CHAR(ADD_MONTHS(TO_DATE(vs_ym_end,'yyyymm'), -12),'yyyymm');<br>
 --先删除表中特定条件的数据。<br>
 DELETE FROM xxxxxxxxxxx_T WHERE ym = is_ym;<br>
  --然后用内置的DBMS_OUTPUT对象的put_line方法打印出影响的记录行数，其中用到一个系统变量SQL%rowcount<br>
 DBMS_OUTPUT.put_line('del上月记录='||SQL%rowcount||'条');<br>
 <br>
 INSERT INTO xxxxxxxxxxx_T(area_code,ym,CMCODE,rmb_amt,usd_amt)<br>
 SELECT area_code,is_ym,CMCODE,SUM(rmb_amt)/10000,SUM(usd_amt)/10000<br>
 FROM BGD_AREA_CM_M_BASE_T<br>
&nbsp;&nbsp; WHERE ym &gt;= vs_ym_beg<br>
&nbsp;&nbsp; AND ym &lt;= vs_ym_end<br>
 GROUP BY area_code,CMCODE;<br>
 <br>
 DBMS_OUTPUT.put_line('ins当月记录='||SQL%rowcount||'条');<br>
 --遍历游标处理后更新到表。遍历游标有几种方法，用for语句是其中比较直观的一种。<br>
 FOR rec IN cur_1 LOOP<br>
&nbsp;&nbsp; UPDATE xxxxxxxxxxx_T<br>
&nbsp;&nbsp; SET rmb_amt_sn = rec.rmb_amt_sn,usd_amt_sn = rec.usd_amt_sn<br>
&nbsp;&nbsp;&nbsp; WHERE area_code = rec.area_code<br>
&nbsp;&nbsp;&nbsp; AND CMCODE = rec.CMCODE<br>
&nbsp;&nbsp;&nbsp; AND ym = is_ym;<br>
 END LOOP;<br>
 <br>
 COMMIT;<br>
 --错误处理部分。OTHERS表示除了声明外的任意错误。SQLERRM是系统内置变量保存了当前错误的详细信息。<br>
EXCEPTION<br>
&nbsp;&nbsp;  WHEN OTHERS THEN<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  vs_msg := 'ERROR IN xxxxxxxxxxx_p('||is_ym||'):'||SUBSTR(SQLERRM,1,500);<br>
&nbsp;&nbsp;&nbsp; ROLLBACK;<br>
&nbsp;&nbsp;&nbsp; --把当前错误记录进日志表。<br>
&nbsp;&nbsp;&nbsp; INSERT INTO LOG_INFO(proc_name,error_info,op_date)<br>
&nbsp;&nbsp;&nbsp; VALUES('xxxxxxxxxxx_p',vs_msg,SYSDATE);<br>
&nbsp;&nbsp;&nbsp; COMMIT;<br>
&nbsp;&nbsp;&nbsp; RETURN;<br>
END;</font></p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/%CA%FD%BE%DD%BF%E2">数据库</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/6f1154e7bd75c328b83820cc.html#comment">查看评论</a>]]></description>
        <pubDate>2008年10月20日 星期一  下午 07:40</pubDate>
        <category><![CDATA[数据库]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/6f1154e7bd75c328b83820cc.html</guid>
</item>

<item>
        <title><![CDATA[【转】Eclipse 插件汇总]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/d700fc030b85fc8ed53f7ca7.html]]></link>
        <description><![CDATA[
		
		让Eclipse可以像JBuilderX一样使用拖拉方式建构GUI的外挂： <br>
1.Jigloo SWT/Swing GUI Builder ： <br>
<a href="http://cloudgarden.com/jigloo/index.html" target="_blank">http://cloudgarden.com/jigloo/index.html</a> ;<br>
下载此版本：Jigloo plugin for Eclipse (using Java 1.4 or 1.5) 安装后即可由档案-&gt;新建-&gt;其它-&gt;GUI Form选取要建构的GUI类型。 <br>
<br>
2.Eclipse Visual Editor Project： <br>
<a href="http://www.eclipse.org/vep/" target="_blank">http://www.eclipse.org/vep/</a> ;<br>
点选下方Download Page，再点选Latest Release 0.5.0进入下载。 <br>
除了VE-runtime-0.5.0.zip要下载外，以下这2个也要： <br>
EMF build 1.1.1: (build page) (download zip) <br>
GEF Build 2.1.2: (build page) (download zip) <br>
<br>
3.0 M8版本，请下载： <br>
EMF build I200403250631 <br>
GEF Build I20040330 <br>
VE-runtime-1.0M1 <br>
<br>
安装成功后，便可由File-&gt;New-&gt;Visual Class开始UI设计。 <br>
安装成功后，即可由新建-&gt;Java-&gt;AWT与Swing里选择 <br>
所要建构的GUI类型开始进行设计。VE必须配合着对应 <br>
版本，才能正常使用，否则即使安装成功，使用上仍会 <br>
有问题。 <br>
<br>
使用Eclipse来开发JSP程序： 外挂名称：lomboz(下载页面) <br>
<a href="http://forge.objectweb.org/project/showfiles.php?group_id=97" target="_blank">http://forge.objectweb.org/project/showfiles.php?group_id=97</a> ;<br>
请选择适合自己版本的lomboz下载，lomboz.212.p1.zip表示2.1.2版， <br>
lomboz.3m7.zip表示M7版本....以此类推。 <br>
lomboz安装以及设置教学： <br>
Eclipse开发JSP-教学文件 <br>
<br>
Java转exe篇： <br>
实现方式：Eclipse搭配JSmooth(免费)。 <br>
1.先由Eclipse制作包含Manifest的JAR。制作教学 <br>
2.使用JSmooth将做好的JAR包装成EXE。 <br>
JSmooth下载页面： <br>
<a href="http://jsmooth.sourceforge.net/index.php" target="_blank">http://jsmooth.sourceforge.net/index.php</a> ;<br>
3.制作完成的exe文件，可在有装置JRE的Windows上执行。 <br>
<br>
<br>
几个常用的eclipse插件 <br>
<br>
<br>
1、struts-console、faces-console<br>
开发struts应用之必需控件，对各种struts配置文件进行图形界面操作<br>
<a href="http://www.jamesholmes.com/struts/console/" target="_blank">http://www.jamesholmes.com/struts/console/</a><br>
<a href="http://www.jamesholmes.com/JavaServerFaces/console/" target="_blank">http://www.jamesholmes.com/JavaServerFaces/console/</a><br>
<br>
EasyStruts<br>
　http://easystruts.sourceforge.net<br>
<br>
StrutsIDE<br>
( LGPL / J2EE development platform )<br>
updated:2005-5-2<br>
version 1.1.4<br>
StrutsIDE is an Eclipse plugin for web application development using Jakarta Struts Framework. It provides graphical editing for struts-config.xml.<br>
<a href="http://amateras.sourceforge.jp/cgi-bin/fswiki_en/wiki.cgi?page=StrutsIDE" target="_blank">http://amateras.sourceforge.jp/cgi-bin/fswiki_en/wiki.cgi?page=StrutsIDE</a><br>
<br>
<br>
2、xmlBuddy<br>
编辑xml文件的插件，支持代码援助(根据DTD定义)<br>
<a href="http://www.xmlbuddy.com/" target="_blank">http://www.xmlbuddy.com</a><br>
<br>
3、sysdeo tomcat plug-in<br>
支持开发环境中Tomcat调试<br>
<a href="http://www.sysdeo.com/eclipse/tomcatPlugin.html" target="_blank">http://www.sysdeo.com/eclipse/tomcatPlugin.html</a><br>
<br>
4、lomboz j2ee plug-in<br>
支持代码援助式编辑jsp文件。eclipse本身也很快就会支持jsp编辑<br>
<a href="http://www.objectlearn.com/" target="_blank">http://www.objectlearn.com</a> (学习)<br>
<a href="http://forge.objectweb.org/project/showfiles.php?group_id=97" target="_blank">http://forge.objectweb.org/project/showfiles.php?group_id=97</a> (下载)<br>
<br>
5、jFacedbc 数据库插件<br>
<a href="http://sf.net/projects/jfacedbc" target="_blank">http://sf.net/projects/jfacedbc</a><br>
<br>
6、vss plugin<br>
支持集成开发环境中VSS检出检入支持<br>
<a href="http://sf.net/projects/vssplugin" target="_blank">http://sf.net/projects/vssplugin</a><br>
<br>
7，VE(visual editor),emf,gef插件<br>
<br>
<br>
<br>
Solex<br>
( Free / Testing )<br>
updated:2005-1-23<br>
Version0.5.2b for Eclipse 3.*<br>
Solex is a Web application testing tool built as a plug-in for the Eclipse IDE. It provides functions to record a client session, adjust it according to various parameters and replay it later typically in order to ensure non regression ...<br>
<a href="http://sourceforge.net/projects/solex/" target="_blank">http://sourceforge.net/projects/solex/</a><br>
<br>
<br>
SWT/Swing Designerupdated<br>
( Free and commercial versions / UI )<br>
updated:2005-5-3<br>
Versions 4.0.1 Eclipse 2.0.x, 2.1.x, 3.0.x and 3.1.0 M1-M6<br>
SWT/Swing Designer is a powerful and easy to use two-way Java GUI designer that supports both Eclipse SWT and Sun Swing technology. It is very easy to create Java GUI applications without spend...<br>
<a href="http://www.swt-designer.com/" target="_blank">http://www.swt-designer.com/</a><br>
<br>
<br>
eclipse-tutorialupdated<br>
( N/A / Tutorial )<br>
updated:2005-5-6<br>
tutorial accesible via through an eclipse plugin too. A collection of tutorials which describe how to use Eclipse for Java development. Developing open source Java applications with java.net and Eclipse This HTML tutorial introduces Eclipse and shows how it can be used to develop open source Java...<br>
<a href="http://eclipse-tutorial.dev.java.net/" target="_blank">http://eclipse-tutorial.dev.java.net/</a><br>
<br>
<br>
Exadel Studio -- Free IDE for JSF and Strutsupdated<br>
( Free / Web )<br>
updated:2005-5-8<br>
Version 2.5.1 for Eclipse 3.0.x.<br>
Exadel Studio is a powerful Web application development tool that extends Eclipse functionality allowing developers to fully utilize Rapid Application Development (RAD) techniques. This cost-effective, simplified solution i...<br>
<a href="http://www.exadel.com/products_exadelstudio.htm" target="_blank">http://www.exadel.com/products_exadelstudio.htm</a><br>
<br>
XmlAuthor<br>
( Free / XML )<br>
updated:2005-5-2<br>
XmlAuthor is a high quality XML editor plug-in for Eclipse 3.1. It provides all of the standard features you would expect to find in an eclipse editor including: - Syntax Highlighting - Error Reporting - Outline View with Navigation Support. - Content Assist XmlAuthor is free for both comme...<br>
<a href="http://www.svcdelivery.com/" target="_blank">http://www.svcdelivery.com</a><br>
<br>
XMLBuddy<br>
( Free and commercial versions / XML )<br>
updated:2005-1-30<br>
Version 2.0.23<br>
This version provides basic XML editing capabilities, including support for coloring, code assist, outline view, encoding and validation. The download is an Eclipse plugin you can unzip into your plugins folder.<br>
<a href="http://www.xmlbuddy.com/" target="_blank">http://www.xmlbuddy.com</a><br>
<br>
EclipseUML2<br>
( CPL1.0 / UML )<br>
updated:2005-4-26<br>
Version 1.0.2, and 1.1.0 Integration build (I200504210935) for Eclipse 3.0<br>
The UML2 project (an Eclipse Tools sub-project) is an EMF-based implementation of the UML 2.0 metamodel for the Eclipse platform. The objectives of this project are to provide a useable ...<br>
<a href="http://www.eclipse.org/uml2" target="_blank">http://www.eclipse.org/uml2</a><br>
<br>
Omondo EclipseUML<br>
( Free for non-commercial use / UML )<br>
updated:2005-4-11<br>
EclipseUML 2.0.0 Studio/Free for Eclipse 3.0.2*<br>
OMONDO EclipseUML will launch the first modeling software offering full native integration with Eclipse and WSAD. As opposed to other UML Vendors who just re-adapt their software, our solution has been develope...<br>
<a href="http://www.omondo.com/download/index.html" target="_blank">http://www.omondo.com/download/index.html</a><br>
<br>
Sysdeo Eclipse Tomcat Launcher<br>
( Free / Tomcat )<br>
updated:2005-4-30<br>
Version 2.2.1 for Eclipse 2.1.*, Version 3.1 beta for Eclipse 3.0/3.1<br>
Features: - Starting, stopping and restarting Tomcat 5.x, Tomcat 4.x or 3.3 - Registering Tomcat process to Eclipse debugger - Creating or importing a WAR project (wizard can update ser...<br>
<a href="http://www.sysdeo.com/eclipse/tomcatPlugin.html" target="_blank">http://www.sysdeo.com/eclipse/tomcatPlugin.html</a><br>
<br>
Lomboz<br>
( Free / J2EE development platform )<br>
updated:2005-2-10<br>
R1 Build-20050106 for Eclipse 3.1.x, R2 Build-20050106 for Eclipse 3.0.x, R3 Build-04042004-1 Eclipse 2.1.x<br>
Lomboz is a free Eclipse plugin for J2EE developers. The tool follows a simple principle: &quot;No magic tricks&quot;. Lomboz is integrated with many popular op...<br>
<a href="http://forge.objectweb.org/projects/lomboz" target="_blank">http://forge.objectweb.org/projects/lomboz</a><br>
<br>
Solex<br>
( Free / Testing )<br>
updated:2005-1-23<br>
Version0.5.2b for Eclipse 3.*<br>
Solex is a Web application testing tool built as a plug-in for the Eclipse IDE. It provides functions to record a client session, adjust it according to various parameters and replay it later typically in order to ensure non regression ...<br>
<a href="http://sourceforge.net/projects/solex/" target="_blank">http://sourceforge.net/projects/solex/</a><br>
<br>
SQLExplorer<br>
( LGPL / Database )<br>
updated:2005-3-29<br>
Version 2.2.3 for eclipse 3.0<br>
SQLExplorer is a database query/schema viewer for nearly any kind of JDBC database. It also supports plugins for specialized functionality for individual databases and data tools ( like Hibernate ) It is fork of the JFace...<br>
<a href="http://sourceforge.net/projects/eclipsesql" target="_blank">http://sourceforge.net/projects/eclipsesql</a><br>
<br>
DBEdit<br>
( Free for non-commercial use / Database )<br>
updated:2005-4-12<br>
Version 1.0.3.1 for Eclipse 3.0<br>
DbEdit is a set of plugins for the Eclipse Platform that provide viewing, editing and designing capabilities using the JDBCTM API. It is not intended to replace any proprietary database management tool because it surely cannot beat the...<br>
<a href="http://sourceforge.net/projects/dbedit" target="_blank">http://sourceforge.net/projects/dbedit</a><br>
<br>
Hibernate Synchronizer<br>
( CPL1.0 / Database )<br>
updated:2005-1-28<br>
v2.2.2 for Eclipse 2.1, v3.0.1 for Eclipse 3.x<br>
Hibernate Synchronizer is a free Eclipse plugin code generation tool to be used with the Hibernate persistence framework. The plugin will automatically generate java code wh...<br>
<a href="http://hibernatesynch.sourceforge.net/" target="_blank">http://hibernatesynch.sourceforge.net</a><br>
<br>
DB Studio<br>
( Free / Database )<br>
updated:2005-3-19<br>
Version 3.1.1<br>
New Version 3.1.1 DB Studio 3.1.1 is now available in 3 formats: * As an Eclipse plugin * As a Stand-Alone Application (pre-packaged with Eclipse) * As part of ThinStructure 3.1.1 DB Studio is an easy-to-use graphical front-end to all databases....<br>
<a href="http://www.awoma.com/dbstudio" target="_blank">http://www.awoma.com/dbstudio</a><br>
<br>
<br>
<br>
<br>
NRG JavaScript editornew<br>
( Unknown / Languages )<br>
updated:2005-5-8<br>
A simple Javascript editor with syntax highlighting and code completion<br>
<a href="http://www.energybyte.com/products/open%20source/" target="_blank">http://www.energybyte.com/products/open%20source/</a><br>
<br>
NitroX JSP Editor J2EE development platform (1.0)<br>
FREE NitroX JSP Editor for Eclipse Download: <a href="http://www.m7.com/epiinfo.do" target="_blank">http://www.m7.com/epiinfo.do</a> The NitroX JSP Editor provides the following features: * Professional JSP source editor * Simultaneous 2-way source and visual JSP editors * JSP 2.0 (including EL) - Unequaled! * JSTL * Grapical editor for TLDs * Graphical editor for web.xml * Code completion * Custom tag library support * + much more * and it's FREE! Act now because this offer is available only for a limited time. Thank you, M7 Team<br>
more<br>
<br>
NitroX Struts IDE J2EE development platform (0.6663198)<br>
itroX for JSP and Struts - Extends eclipse to the next level in web application development. Debug JSP pages directly. Set break points directly on your JSP pages, step through the actual JSP page. Step into tags, scriplets, etc. Debugging capabilities goes well beyond other environments with support for most application servers. Unique JSP variables view isolates variables for easy access.AppXRay - Scans the web app and provides NitroX the knowledge of all web artifacts so that automatic v...<br> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/%B9%A4%BE%DF%CA%B9%D3%C3">工具使用</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/d700fc030b85fc8ed53f7ca7.html#comment">查看评论</a>]]></description>
        <pubDate>2008年07月31日 星期四  下午 12:36</pubDate>
        <category><![CDATA[工具使用]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/d700fc030b85fc8ed53f7ca7.html</guid>
</item>

<item>
        <title><![CDATA[【转】FTP客户端 com.enterprisedt.net.ftp.FTPClient]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/013336d3f3539c063bf3cf09.html]]></link>
        <description><![CDATA[
		
		<p>前一篇写了 <a href="http://hi.baidu.com/joecom/blog/item/5a58d8f92ea63459252df280.html" target="_blank">简单的FTP客户端 sun.net.ftp.FtpClient</a> ，由于 sun.net.ftp.FtpClient 功能比较简单，所以往往不能满足我们的需求，我们可以借助于com.enterprisedt.net.ftp.FTPClient 来完成。</p>
<p> 以下关于 com.enterprisedt.net.ftp.FTPClient 的使用方法。</p>
<p>1、引入包</p>
<div style="border-right: #8a8a8a 1px solid; padding-right: 6px; border-top: #8a8a8a 1px solid; padding-left: 6px; font-size: 12px; padding-bottom: 6px; margin: 1px; overflow: auto; border-left: #8a8a8a 1px solid; padding-top: 6px; border-bottom: #8a8a8a 1px solid"><span style="color: #0000ff">import</span> com.enterprisedt.net.ftp.FTPClient; <br>
<span style="color: #0000ff">import</span> com.enterprisedt.net.ftp.FTPFile; <br>
<span style="color: #0000ff">import</span> com.enterprisedt.net.ftp.FTPMessageCollector; <br>
<span style="color: #0000ff">import</span> com.enterprisedt.net.ftp.FTPTransferType; <br>
<span style="color: #0000ff">import</span> com.enterprisedt.net.ftp.FTPConnectMode; <br>
<span style="color: #0000ff">import</span> com.enterprisedt.util.debug.Level; <br>
<span style="color: #0000ff">import</span> com.enterprisedt.util.debug.Logger; <br>
<span style="color: #0000ff">import</span> java.util.List;</div>
<p>2、我们建一个叫做FtpEptUtil的class</p>
<div style="border-right: #8a8a8a 1px solid; padding-right: 6px; border-top: #8a8a8a 1px solid; padding-left: 6px; font-size: 12px; padding-bottom: 6px; margin: 1px; overflow: auto; border-left: #8a8a8a 1px solid; padding-top: 6px; border-bottom: #8a8a8a 1px solid"><span style="color: #008000">/** 判断文件夹是否存在，这种方式不是很准 */</span> <br>
<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">boolean</span> isDirExist(<span style="color: #990000">String</span> dirname,<span style="color: #990000">String</span>[] files) <br>
{ <br>
&nbsp;&nbsp;<span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i=0;i&lt;files.length;i++) <br>
&nbsp;&nbsp; { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">if</span> (files[i].indexOf(<span style="color: #ff00ff">&quot;&lt;DIR&gt;&quot;</span>)&gt;-1&amp;&amp;files[i].indexOf(dirname)&gt;-1) <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">return</span> true; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>
&nbsp;&nbsp; } <br>
&nbsp;&nbsp;<span style="color: #0000ff">return</span> false; <br>
}</div>
<div style="border-right: #8a8a8a 1px solid; padding-right: 6px; border-top: #8a8a8a 1px solid; padding-left: 6px; font-size: 12px; padding-bottom: 6px; margin: 1px; overflow: auto; border-left: #8a8a8a 1px solid; padding-top: 6px; border-bottom: #8a8a8a 1px solid"><span style="color: #990000">String</span> host = <span style="color: #ff00ff">&quot;10.163.7.15&quot;</span>;  <br>
<span style="color: #990000">String</span> user = <span style="color: #ff00ff">&quot;cxl&quot;</span>;  <br>
<span style="color: #990000">String</span> password = <span style="color: #ff00ff">&quot;1&quot;</span>;  <br>
<span style="color: #008000">/** 定义FTPClient便利 */</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
FTPClient ftp = null;  <br>
<span style="color: #0000ff">try</span>&nbsp;&nbsp;  <br>
{  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 创建FTPClient */</span>&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp = <span style="color: #0000ff">new</span> FTPClient();  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 连接服务器 */</span>  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp.setRemoteHost(host);  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp.connect();  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 登陆 */</span>  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp.login(user, password);  <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 以波动模式连接 */</span>&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp.setConnectMode(FTPConnectMode.PASV);  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** ASCII方式：只能传输一些如txt文本文件，  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * zip、jpg等文件需要使用BINARY方式&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * */</span>  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">//ftp.setType(FTPTransferType.ASCII);  </span><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp.setType(FTPTransferType.BINARY);  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 切换到主目录，并枚举主目录的所有文件及文件夹  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 包括日期、文件大小等详细信息&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * files = ftp.dir(&quot;.&quot;)，则只有文件名  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #990000">String</span>[] files = ftp.dir(<span style="color: #ff00ff">&quot;.&quot;</span>, true);  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i &lt; files.length; i++)  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(files[i]);  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 下载info文件夹下的所有文件到 d:\temp 目录下 */</span> <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #990000">String</span> outdir = <span style="color: #ff00ff">&quot;d:\\temp\\&quot;</span>; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File attachments = <span style="color: #0000ff">new</span> File(outdir); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 如果文件夹不存在，则创建 */</span> <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">if</span> (!attachments.exists()) <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; attachments.mkdir(); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 获取文件夹下的所有文件 */</span> <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; files = ftp.dir(<span style="color: #ff00ff">&quot;info&quot;</span>); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp.chdir(<span style="color: #ff00ff">&quot;info&quot;</span>);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i=0;i&lt;files.length;i++) <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 下载文件 */</span> <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp.get(outdir+files[i],files[i]);&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 下载后删除文件 */</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp.delete(files[i]); <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 上传文件到服务器当前目录 */</span>  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp.put(<span style="color: #ff00ff">&quot;20061108.xml&quot;</span>, <span style="color: #ff00ff">&quot;20061108.xml&quot;</span>);  <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 删除文件 */</span>  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp.delete(<span style="color: #ff00ff">&quot;20061108.xml&quot;</span>);  <br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 不存在则创建文件夹 */</span>  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">if</span> (!isDirExist(<span style="color: #ff00ff">&quot;20061108&quot;</span>,files))  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp.mkdir(<span style="color: #ff00ff">&quot;20061108&quot;</span>);  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000">/** 断开连接&nbsp;&nbsp; */</span>  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ftp.quit();  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
} <span style="color: #0000ff">catch</span> (<span style="color: #990000">Exception</span> e)&nbsp;&nbsp;  <br>
{  <br>
&nbsp;&nbsp; logger.error(<span style="color: #ff00ff">&quot;Demo failed&quot;</span>, e);  <br>
}</div>
<p>-----------------JoeCom 2006-11-24 周五</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/java%CC%E2%D0%CD">java题型</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/013336d3f3539c063bf3cf09.html#comment">查看评论</a>]]></description>
        <pubDate>2008年07月31日 星期四  上午 10:33</pubDate>
        <category><![CDATA[java题型]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/013336d3f3539c063bf3cf09.html</guid>
</item>

<item>
        <title><![CDATA[程序员职业生涯探讨。]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/ff051a4c6a6cd1ffd62afc02.html]]></link>
        <description><![CDATA[
		
		<div class="postText">这是个人对程序员生涯的一孔之见，只代表作者的个人想法，其中疏漏甚至错误之处在所难免，希望大家多提宝贵意见。 <br>
<br>
前言 <br>
<br>
丰厚的薪水，高端的职位和有成就感的事业是人人都想要的，而这些都取决于你每天的认真工作，努力学习和灵活做人上。日子就像一块块砖，你就像是一个泥瓦匠每天在堆砌着你的人生，最终砌出一个宏伟的大厦或是一幢低矮的小屋甚至是堆成一堆瓦砾全取决于你自己。 <br>
<br>
程序员是一碗青春饭吗？ <br>
<br>
程序界和软硬件一样都要遵守摩尔定律，也就是说当前的技术知识很快会被替代，你需要不断学习新的东西，否则就会面临着被淘汰的危险。然而，一个人的学习动力和欲望都是有限的，记忆力还会随着年龄的增长而衰退，从这个道理上来说，年龄大的迟早会被年龄小的超过，成为鸡肋并最终将被无良的公司抛弃。难道程序员这个职业做不过三十五岁，永远是一碗青春饭吗？ <br>
<br>
根基是决定一个人会不会被淘汰的关键 <br>
<br>
我刚进入IT业就听说过这种说法，不过当时的年龄限度是30岁，当工作一段时间后，这个限度上调了五岁，而且还有陆续上调的趋势，而在各个公司中，超过35的程序员并不罕见，在外国做了一辈子软件的人也屡见不鲜。难道&ldquo;程序员是吃青春饭的&rdquo;是一个谬论吗？那么为什么很多人持有并宣扬此论调呢？ <br>
其实这个结论既正确也不正确，它的结果取决于要评判的人。一个人如果根基扎实，他就更容易学习新的事物新的知识，年轻和精力相对于扎实牢靠的根基是微不足道的，对于别人是一座山的障碍，对于他也许就是一张纸的隔阂，这样的人是不会面临着被超越被淘汰的危机的，青春饭的论调对他完全不适用；而一个人如果根基不牢，只是靠精力和年龄勉强立足，每次新事物新知识出现都在和年轻人拼体力拼精力，那么他迟早将被淘汰，优胜劣汰的社会就是这样残酷无情，但很公平 。 <br>
<br>
什么是程序员的根基 <br>
<br>
面向对象的思想。MVC,分层架构，按接口编程，依赖注入，OR Mapping,面向方面，SOA等都是OO的发展，不从根本上领会它，程序员就难以把握程序发展进化的趋势，永远停留在老窠臼中无法自拔，自我提高升华进化当然更是一句空<span style="color: #333333">话</span>。 <br>
数据结构。程序的核心目的是收集，整理和展示数据，而数据的核心就是数据结构，它的重要性不言而喻。线性表、栈/队列、串、多维数组、广义表、树、图这些数据结构你都需要认真掌握，掌握的程度越深，日后学习的阻力就越小，相对于他人将更有优势。<a href="http://www.01ws.cn/www/61lingdaojianghua/" target="_blank"><span style="color: #ffffff">讲话</span></a> <br>
算法。如果缺乏好的算法，程序架构得再完美数据再贴切都无济于事，犹如一台法拉利却用牛来拉一样。迭代法、穷举搜索法、递推法、贪婪法、回溯法、分治法、动态规划法都是你需要掌握的，不要以为这很难，读透一本算法导论就足够了。 <br>
基础API。只有思想，数据结构和算法只是一条腿，要健步如飞还得两条腿走路。程序员的另一条腿就是基础API，你需要认真掌握TCP/IP协议详解，Socket通信，线程，文件读写等每种语言和技术都需要的基础知识，一个新事务即使再绚烂夺目也是利用这些基石搭建而成的，如果你彻底了解了它们将永处不败的境地，甚至觉得新技术也不过如此。 <br>
<br>
如何打好根基 <br>
<br>
多学。从项目中学，从书本中学，从别人哪里学，从失败中学习，掌握基础API就是需要多学习，如果有已有的知识总结可以起到事半功倍的效果。 <br>
多想。学习OO和算法都需要理解，光是死记硬背毫无用处，子曰&ldquo;学而不思则罔&rdquo;，OO和算法的学习都需要一个理解消化的过程，只有彻底理解了，你才真正掌握了它们。 <br>
多练。经过代码的历练，程序员才能百炼成钢，成功的项目能告诉你什么是正确的，失败的项目会暗示它为什么会失败，下次你就能更进退有据。更重要的一点是，不做项目，不做多个项目，不做大项目，程序员对&ldquo;度&rdquo;的把握总是缺乏经验，不是过就是不及。真正亲手手写过10-20万行代码的是成为一个成熟程序员的必要条件（但不是充分条件）。 <br>
多见。眼光狭窄，目光短浅，固步自封只能造就一只井底之蛙，你的眼光必须超越自己所在的环境才能取得真正的进步，现在有许多开源社区和软件都是你应该涉足的地方，和什么样的人在一起你自然也会成为什么样的人。&ldquo;蓬生麻中，不扶而直，白沙在涅，与之俱黑&ldquo;说的就是这个道理。 <br>
<br>
<br>
程序员的身价是由什么决定的？ <br>
<br>
如果一个程序员有良好的根基，充满智慧的头脑，积极主动的精神和锲而不舍的毅力，他就一定能有丰厚的薪水吗？答案是否定的。原因在于薪水不光取决于自身的水平，还取决于周围的环境。 <br>
程序员的身价首先决定于他能给雇主带来多大的利益，如果带不来利益，程序员再有本事也是白搭，这就要求程序员一定要根据自己的特点寻找合适自己发展的公司，在你的职业生涯之初就要研究自己和世界，逐步选择一个合适自己的方向发展，永远记住，方向比努力更重要。 <br>
其次，程序员的身价也取决于他的不可替代性，即使一个人能带来很多的利益但身后有大批的后备军资源，干不好立即就有人顶替你，这样的人薪水也不会高，反正你不干有的是人干，资本家就是这样无情。这告诉我们要使自己不可替代，就要努力向高处走，一定和众人拉开差距才能彰显自己的价值。 <br>
<br>
程序员生涯能给我们带来什么 <br>
<br>
IT是一个朝阳产业，正处于蓬勃发展中，选择这一行比其它行业拥有更多的发展机会。 <br>
相对于其它职业，程序员对自己命运的把握程度更大。&rdquo;荣辱自取，不求于人&ldquo;，这是一种非常好的感觉，在别的职业中是难以找到的。 <br>
只要人们还在使用计算机，程序员这个职业就永远不会消亡，因为计算机运行永远需要软件。 <br>
在信息时代，程序是一个非常有效的收集或发布信息的工具，如果利用得当，它能直接带来巨大的收益。 <br>
<br>
程序员事业发展的方向 <br>
<br>
架构师，CIO。对于热衷于技术的程序员来说这是一个不错的方向，架构师这个职位的必要条件是有优秀的技术功底和丰富的设计经验，此外还需要有某个领域的深入知识。对于CIO要求更高，他需要对未来五年内的技术走势把握得比较清楚。 <br>
项目经理，部门经理。人际关系处理良好，语言能力出众的程序员适合走这条路。这也是大连大多数程序员的理想选择。 <br>
做自己的网站，当一个给自己发薪水的人。网站做好了收入颇丰，低端如hao123，高端如google的例子都摆在眼前。其实做网站初期投入并不巨大，但需要持之以恒的毅力尤其是敏锐的市场嗅觉，它决定了你是否能从网站中盈利。此外，拥有自己的网站对于自我宣传，建立个人品牌有很大的好处。这条路适合于热衷于网络技术的程序员。 <br>
开公司创业。制作软件并不难，难得是是否能接到活，能否接到长期的活，如果能做到的话，你就可以选择创业。拿工资致富是不可能的，而一次项目的利润可能就等于你前期的工资总和。 <br>
<br>
后语 <br>
<br>
相对于永恒的宇宙，我们确实非常渺小，应该有谦卑之心；但是跟别的任何生命相比，我们的尊严，我们的价值，我们的可能性，是一样的；就算人家确实是牡丹玫瑰，自己只是小小的，角落里的一朵苔花，也应该灿烂地绽放，把自己涨圆，并且自豪地仰望苍天，说：&ldquo;我也能！&rdquo;<br>
<br>
本文转自:
<h3><a href="http://werwfrxx.javaeye.com/blog/198196">程序员职业生涯探讨。</a></h3>
</div> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/%B4%B4%D2%B5%C0%F8%D6%BE">创业励志</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/ff051a4c6a6cd1ffd62afc02.html#comment">查看评论</a>]]></description>
        <pubDate>2008年07月18日 星期五  下午 06:43</pubDate>
        <category><![CDATA[创业励志]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/ff051a4c6a6cd1ffd62afc02.html</guid>
</item>

<item>
        <title><![CDATA[【转】程序员创业三关]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/3908e0fe1e70b4375d60083c.html]]></link>
        <description><![CDATA[
		
		<p>当人们还在浩叹第一次网络泡沫破灭的时候，互联网已经悄悄迎来了它的第二个春天；从某种意义上看，甚至已经进入了夏天&mdash;&mdash;热烈但不乏浮躁、兴奋但失之肤浅。某位投资人声称今年总共有三十亿美金资本进入中国，言下之意，大家都可以甩开膀子大干快上，登陆纳市不好说，搞笔钱进来花差花差多半是没问题的。</p>
<p>另一方面，程序员创业，在中国乃至国外，都不是什么新鲜事儿。我们是那么一群聪明、优秀的家伙，大脑发达，点子就像啤酒的泡沫，扑腾扑腾直往外冒，天生我才，有什么做不到的呢？遥想比尔盖茨当年，西装革履，谈笑间，多少豪杰灰飞烟灭……</p>
<p>于是我看到，无数公司成立了，眼看他雄心勃勃，眼看他一败涂地。成败固然不足以论英雄，然而英雄却不得不面对可能的成败。可惜的是，程序员朋友们在创业的时候，往往没有做好充分准备。据一些资料显示，百分之七十五的新创公司，会在两、三年内倒闭。笔者也曾经见过许多程序员创业失败的个案；成功或不成功，有很多因素制约；对于立志创业的程序员，至少应该突破三关。</p>
<p>第一是模式关。你的创业计划，也许起源于灵机一动。可惜的是，好点子并不能保证你创业成功。我相信多数程序员的点子，尚不至于低级到靠软色情、盗版、恶性SEO等等下作手段去骗取广告费的地步，但怎么从点子变成盈利模式，却是让很多创业者迷惑的事情。在一些业界聚会上，总听到类似&ldquo;只要有流量，总有办法赚钱&rdquo;之类的说法，在2000年持同样言论的创业者，多数已经成为失败的先烈，因为他们始终没明白，赚现钱的生意才是好生意。三大门户成功的要点，在于他们想出办法，把流量转化为盈利模式。缺乏有效的模式，流量只是成本。确定有效经营模式、组建有力创业团队，是首要任务。</p>
<p>第二是管理关。从程序员变成管理者，是艰难的过程。你得明白两件事：一、管理和写程序一样，是门科学；二、人和计算机不一样，人有感情、会出错。协调沟通能力，是程序员创业必备的素质。曾经眼见一些项目经理，和手下技术人员通过邮件争辩不休，甚至发展到在Blog上互相嘲讽，这样的管理，可谓彻底失败。另一个极端是，和手下称兄道弟、一团和气，工作被感情所左右，酒肉害了朋友。管理有那么难吗？我看未必。只做对公司有利的事，就是根本原则。在和你的手下打交道时，请三思：我这么做，对公司有好处吗？对事业有好处吗？如果答案是否定的，那你需要另一个解决方案。</p>
<p>第三是坚持关。一位多次创业不成功的朋友告诉我，他总结了一条&ldquo;三年定律&rdquo;，即任何事如果不能坚持三年，则一定失败。诚哉斯言！另一位朋友说，中国人相信机会，西方人相信方向和时间，虽有些偏激，却也不乏道理。许多程序员都属于思维活跃、点子特多的一类人，当有新鲜的想法出来时，他们倾向于放弃或冷落手上正在执行的计划。点子复点子，点子何其多，每天新点子，万事成蹉跎。西谚有云，双鸟在林不如一鸟在手；吃到嘴里的鸭子才是好鸭子，湖里那只鸭子看起来比较肥？也许吧，不过，吃了这只鸭子再去涉水抓那只，是不是更有把握呢？</p>
<p>文短意深，未尽之处不及一一道来。奉上忠言数句，与程序员朋友们共勉：你永远不是最聪明的人；手下比你强是好事；创业不怕起步晚，只怕起个不停。</p>
<p>摘自<a href="http://blog.csdn.net/grhunter/">http://blog.csdn.net/grhunter/</a>韩磊@CSDN</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/%B4%B4%D2%B5%C0%F8%D6%BE">创业励志</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/3908e0fe1e70b4375d60083c.html#comment">查看评论</a>]]></description>
        <pubDate>2008年07月18日 星期五  下午 06:21</pubDate>
        <category><![CDATA[创业励志]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/3908e0fe1e70b4375d60083c.html</guid>
</item>

<item>
        <title><![CDATA[程序员创业指导书]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/64323bc73071f0dad000602b.html]]></link>
        <description><![CDATA[
		
		<table height="20" cellspacing="0" cellpadding="2" width="760" border="0">
    <tbody>
        <tr>
            <td bgcolor="#f0f8ff" colspan="2"><font color="#ff00ff">怎样才叫创业？</font></td>
        </tr>
        <tr>
            <td colspan="2">
            <p>&nbsp;&nbsp; 创业就是成就事业，就是去努力实现自己的一些远大的想法或目标，并且最终的成果属于自己，这些成果包括荣誉、金钱、实体。对程序员来说，靠自己一个人写一个程序去卖获得一些现金，那还不是创业，那只是创业的雏形；你必须建造出自己的团队，并打造一条耐久的赚钱流水线，才是真正走向了创业的成功之路。</p>
            </td>
        </tr>
        <tr>
            <td bgcolor="#f0f8ff" colspan="2"><font color="#ff00ff">为什么要创业？</font></td>
        </tr>
        <tr>
            <td colspan="2">
            <p>&nbsp;&nbsp; 创业成功后的一个意义在于，即使你不工作，收入也不会间断，钱不再是你的终极目标。你可以自由分配自己的时间，你会有更多的时间去做更多自己想做的事。这也是你的基本目标。如果还不清楚这点，请仔细阅读这篇文章：【<a href="http://www.pudn.com/guandao.htm" target="_blank">管道的故事</a>】。</p>
            </td>
        </tr>
        <tr>
            <td bgcolor="#f0f8ff" colspan="2"><font color="#ff00ff">创业需要什么条件？</font></td>
        </tr>
        <tr>
            <td colspan="2">
            <p>&nbsp;&nbsp; 作为程序员，你必须要有自己技术积累，如果你不能独立完成一个程序，如果你对写一个程序感觉畏惧，说明你创业的技术条件还不具备，你还需要阅读站长的【<a href="http://www.pudn.com/dl.asp?id=9546" target="_blank">怎样成为一个技术高手</a>】；其次，你要有业务积累，就是你对未来想做什么和要做的东西有一个清晰的概念和比较熟悉的了解，你才能对它的市场前景、未来发展趋势有所掌握，你才能很好地设定自己的创业方案；最后，你最好要有一定的资金积累，如果你每个月的工资都是花光，银行里的存款为0，而且你又找不到愿意出资金的合作伙伴，那么你应该考虑一下现在是否自己每个月应该存下一点钱，用来为未来创业做准备？</p>
            </td>
        </tr>
        <tr>
            <td bgcolor="#f0f8ff" colspan="2"><font color="#ff00ff">创业怎样才能成功？</font></td>
        </tr>
        <tr>
            <td colspan="2">
            <p>&nbsp;&nbsp; 并不是每个人都能很快创业成功，那么怎样才能成功？<br>
            &nbsp;&nbsp; 首先，你要有坚定的信念，因为你未来可能要面临无数的困难和挫折，只有坚定的信念，才能不会使你迷惘和中途放弃，战胜压力，战胜你自己，使你最终坚持到成功那一刻。<br>
            &nbsp;&nbsp; 其次，拥有一个好创意，这个好创意实现后就能给你带来持续不断的收入。善于思索、丰富的经验、对行业充分的了解都能使你不断迸发出好的创意。<br>
            &nbsp;&nbsp; 第三，有了想法后能马上去做，而不是慢慢拖。很多人都有想法，但却没有付诸实施，那和没有想法有什么两样？能成功的人，无非是把自己的想法坚决的执行下去。在执行的过程中学习创业经验，把握机会，幸运之神迟早会降临于你。<br>
            &nbsp;&nbsp; 第四、一个想法的最终实现，可能需要你付出比平常多几倍的精力和时间，如果你坚信实现想法就能带来丰厚的回报，那么就要每天坚持花一些时间为自己的想法做一些工作，并一直坚持下去。积沙成塔，集腋成裘，小小的动作坚持下去就等于巨大的回报。还有也要舍得花费自己的金钱，因为金钱是实现你想法的催化剂和加速剂。<br>
            &nbsp;&nbsp; 第五、先专后广。因为你的资金、人手的限制，注定了你只能做有限的事。细分用户的不同需求，细分不同的用户，专做某一个方面，把这方面做深入，再考虑拓广相关业务。比如yahoo做所有内容的搜索，你可以单独做某个行业的搜索，你做的更专业。就如同你要把一个钉子锲入墙内，最先锲入的是钉子的尖，然后才是整个钉子。<br>
            &nbsp;&nbsp; 第六，寻找好的创业伙伴。好的创业伙伴会使你事半功倍，会使你更专注于自己擅长的方面，会使你的计划进展的更快，比对手更快的推出自己的产品。<br>
            &nbsp;&nbsp; 第七、有些情况下，&ldquo;歪门邪道&rdquo;更容易使你获得金钱。一些在外人看来所不齿的东西，却为很多人带来了丰厚的收入。比如电影网站、短信运营、游戏外挂、黑客入侵等，这些虽然含有不道德的因素，但投入不大，收入却是惊人的，可以很快的让你实现资本积累。如果你不懂&ldquo;歪门邪道&rdquo;，那么就寻找一个懂这些的人加入你的团队吧。另外，在中国的目前情况下，与懂&ldquo;歪门邪道&rdquo;的有市场操作经验的营销人员合作也会使你与钱的距离更贴近一些。</p>
            </td>
        </tr>
        <tr>
            <td bgcolor="#f0f8ff" colspan="2"><font color="#ff00ff">如何选择合作伙伴？</font></td>
        </tr>
        <tr>
            <td colspan="2">
            <p>&nbsp;&nbsp; 除了要求合作伙伴要有一定的能力外，还需要他能有这样的条件：<br>
            &nbsp;&nbsp; 一、你的合作伙伴和你一样有创业激情，而不是只想找个好工作的人。<br>
            &nbsp;&nbsp; 二、你的合作伙伴同样看好你的创意。道不同，不相为谋。<br>
            &nbsp;&nbsp; 三、你的合作伙伴有奉献精神，容易合作。只考虑个人利益最大化的人，是不适合与他合作的。<br>
            &nbsp;&nbsp; 四、你的合作伙伴有足够的时间和精力。因为最开始很多合作者可能同时还有工作，所以如果他不能拿出充分的时间和精力，那和你的合作将是没有任何保证。<br>
            &nbsp;&nbsp; 五、你的合作伙伴最好有一定的经济基础。因为创业开始不可能有现金收入，如果你的合作伙伴现阶段太需要钱，那他不适合与你合作。<br>
            &nbsp;&nbsp; 公平是合作的基础，开始制定一项利益均衡、大家都能从心底接受的职责、利益分配方案是必要条件，否则将会为未来大家的积极性、决策、任务的执行效率等埋下隐患，最终造成你不成功我也失败的合作破裂、分道扬镳的结局。</p>
            </td>
        </tr>
        <tr>
            <td bgcolor="#f0f8ff" colspan="2"><font color="#ff00ff">我应该开发什么样的产品？</font></td>
        </tr>
        <tr>
            <td colspan="2">
            <p>&nbsp;&nbsp; 站长看好互联网应用、手机软件、嵌入式开发三个方面，选择这些不会错。互联网应用创意容易，机会多；手机软件起步没几年，目前处于技术积累阶段，等3G发展后，会有大量的急于进入这个行业的投资者收购有一定技术积累的团队；嵌入式开发市场前景广阔。另外某个行业的专业软件也可以，因为这类软件开发的人少，解决了行业的实际问题，为行业所急需，所以利润高。<br>
            &nbsp;&nbsp; 站长经验有限，无法为各位提供更准确的分析。您只要每天阅读各大网站(enet.com.cn,sina.com.cn等)的IT新闻，就可以获得更多的信息。</p>
            </td>
        </tr>
        <tr>
            <td bgcolor="#f0f8ff" colspan="2"><font color="#ff00ff">为什么要选择程序员联合开发网</font></td>
        </tr>
        <tr>
            <td colspan="2">
            <p>&nbsp;&nbsp; 站长创建程序员联合开发网，旨在探索网上联合开发，为广大程序员和开发团队打造一个协作、创业平台，这里有着丰富的人力资源，您可以充分的利用它。当然站长的个人能力有限，希望大家共同努力，不断完善它，使他更适合大家创业、合作开发的需要。让程序员联合开发网与您共同成长。</p>
            </td>
        </tr>
        <tr>
            <td bgcolor="#f0f8ff" colspan="2"><font color="#ff00ff">怎样在程序员联合开发网中实现创业梦想？</font></td>
        </tr>
        <tr>
            <td colspan="2">
            <p>&nbsp;&nbsp; 实现创业梦想还是要靠您自己的努力。您可以在本站建立自己的工作室，招揽有才干的人，努力经营好自己的工作室，等有了志同道合的团队和成熟的产品，就可以考虑工作室转型为公司经营了。</p>
            </td>
        </tr>
        <tr>
            <td colspan="2">&nbsp;&nbsp;<font color="#a0a0a0">等您到了60岁的时候，才发觉自己真的是一事无成，您也许就会回头想一下自己的一生到底做了些什么，您最终的发现将是：您每天都在做差不多相同的事情，但这些事情都是在为别人做嫁衣，自己得到的只是等于自己所消耗的；所以即使是做了一辈子，也没有积累了什么；如果自己用过去的30年时间去实现自己的一个有意义的目标，那30年时间足以让自己成功，可惜自己过去的30年一直没有为一个目标而坚持到底，是不是？既然这样，那么您是否应该明白，自己到底应该每天坚持做点什么才能在60岁的时候不后悔？</font></td>
        </tr>
        <tr>
            <td colspan="2">&nbsp;&nbsp;<font color="#b00000">站长的成功法则</font>：其实很简单，就是&ldquo;你创造了价值，就会收到回报！&rdquo;。所以，<strong>专注于创造价值</strong>，你会成功的。</td>
        </tr>
    </tbody>
</table> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/%B4%B4%D2%B5%C0%F8%D6%BE">创业励志</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/64323bc73071f0dad000602b.html#comment">查看评论</a>]]></description>
        <pubDate>2008年07月18日 星期五  下午 06:07</pubDate>
        <category><![CDATA[创业励志]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/64323bc73071f0dad000602b.html</guid>
</item>

<item>
        <title><![CDATA[【转】Taglib的打包部署和使用方式详解]]></title>
        <link><![CDATA[http://hi.baidu.com/flymz/blog/item/6c0df736aa8290340b55a920.html]]></link>
        <description><![CDATA[
		
		<span class="a14c" > 
<p style="text-indent: 2em"><strong>1. Taglib的编写</strong></p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">Taglib用于将呈现逻辑进行封装。</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">它必须继承自TagSupport类。</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">下面是一个简单的例子：</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em"> </p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code></ccid_code>package org.topxp.taglib;

import java.io.IOException;
import java.util.Date;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class OutTag extends TagSupport {

     /**

     * @see javax.servlet.jsp.tagext.TagSupport#doEndTag()

     */

    @Override

    public int doEndTag() throws JspException {

        JspWriter out = this.pageContext.getOut();

        try {

            out.println(&quot;当前的时间是：&quot;+new Date());

        } catch (IOException e) {

            throw new JspException(e);

        }

        return EVAL_PAGE;

    }

 

    /**

     * @see javax.servlet.jsp.tagext.TagSupport#doStartTag()

     */

    @Override

    public int doStartTag() throws JspException {

        return super.doStartTag();

    }

 }</pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em"><strong>2. tld文件</strong></p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em"> </p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code></ccid_code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?&gt;

&lt;!DOCTYPE taglib PUBLIC &quot;-//Sun Microsystems, Inc.
//DTD JSP Tag Library 1.2//EN&quot; 
&quot;http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd&quot;&gt;

&lt;taglib&gt;

    &lt;tlib-version&gt;1.0&lt;/tlib-version&gt;

    &lt;jsp-version&gt;1.2&lt;/jsp-version&gt;

    &lt;short-name&gt;diego&lt;/short-name&gt;

    &lt;tag&gt;

       &lt;name&gt;out&lt;/name&gt;

       &lt;tag-class&gt;org.topxp.taglib.OutTag&lt;/tag-class&gt;

       &lt;body-content&gt;empty&lt;/body-content&gt;

       &lt;attribute&gt;

           &lt;name&gt;name&lt;/name&gt;

           &lt;required&gt;false&lt;/required&gt;

           &lt;rtexprvalue&gt;false&lt;/rtexprvalue&gt;

       &lt;/attribute&gt;

    &lt;/tag&gt;

&lt;/taglib&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em"><strong>3. Taglib的部署</strong></p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">3.1 简单部署</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">3.1.1 方式一</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">编写tld文件，并且放置到WEB-INF目录或创建子目录，然后在JSP中，使用taglib指令，指定URI即可：</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">&lt; %@ taglib divfix=&rdquo;topxp&rdquo; uri=&rdquo;/WEB-INF/mytaglib.tld&rdquo; %&gt;</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">这个指令，直接指向一个tld文件。</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">3.1.2 方式二</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">也可以在web.xml中用taglib-uri和taglib-location标记来定义它的URI和位置的映射，然后在JSP中指定URI的时候，就直接使用在web.xml中定义的URI即可，这个就不举例子了。</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">3.2 打包部署</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">你也可以将taglib打成jar包，这个时候，你的taglib描述文件（tld文件），必须被放置在jar文件内的META-INF目录（或子目录）下。你可以在这个目录下，放置多个tld文件。</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">如果将taglib打包，这个jar包必须被放置在web-inf/lib目录下。在jar包的meta-inf目录下的tld文件，都可以被自动发现，不需要显式的定义其位置。</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">3.2.1 JSP使用方式一：用URI直接指定jar文件的位置</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">Jsp中可以使用下面的指令来指定tld文件的位置：</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">&lt; %@ taglib divfix=&rdquo;topxp&rdquo; uri=&rdquo;/WEB-INF/lib/topxptaglib.jar&rdquo; %&gt;</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">在这种情况下，因为没有直接指定tld文件的位置，所以，tld文件必须遵守一定的命名规则。规则就是：</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">Tld文件必须命名为：taglib.tld。这样，在meta-inf目录下，只能放置一个tld文件，无法支持多个tld文件。</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">3.2.2 JSP使用方式二：使用定制的URI</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">如果需要在一个jar包中包含多个tld文件，你必须使用某种方式来区分这些tld文件，这种方式就是：</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">在tld文件中，用&lt; uri &gt;标记来区别不同的tld文件。如，可以加入下面的&lt; uri &gt;标记进topxptaglib.jar中的tld文件：&lt; uri &gt;http://www.topxp.org/taglib&lt; /uri &gt;</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">在我们的例子中，假设命名为topxp.tld，下面就是topxp.tld文件的内容，请注意添加了&lt; uri &gt;标记：</p>
<p style="text-indent: 2em"> </p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="#000000" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code></ccid_code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?&gt;

&lt;!DOCTYPE taglib PUBLIC &quot;-//Sun Microsystems, Inc.
//DTD JSP Tag Library 1.2//EN&quot; 
&quot;http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd&quot;&gt;

&lt;taglib&gt;

    &lt;tlib-version&gt;1.0&lt;/tlib-version&gt;

    &lt;jsp-version&gt;1.2&lt;/jsp-version&gt;

    &lt;short-name&gt;diego&lt;/short-name&gt;

    &lt;uri&gt;http://www.topxp.org/taglib&lt;/uri&gt;

    &lt;tag&gt;

       &lt;name&gt;out&lt;/name&gt;

       &lt;tag-class&gt;org.topxp.taglib.OutTag&lt;/tag-class&gt;

       &lt;body-content&gt;empty&lt;/body-content&gt;

       &lt;attribute&gt;

           &lt;name&gt;name&lt;/name&gt;

           &lt;required&gt;false&lt;/required&gt;

           &lt;rtexprvalue&gt;false&lt;/rtexprvalue&gt;

       &lt;/attribute&gt;

    &lt;/tag&gt;

&lt;/taglib&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">这个时候，你可以将你的tld文件命名为其它的名字，如topxpabc.tld。</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">在JSP中，需要使用下面的方式来定义：</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">&lt; %@ taglib divfix=&rdquo;topxp&rdquo; uri=&rdquo;http://www.topxp.org/taglib&rdquo; %&gt;</p>
<p style="text-indent: 2em"> </p>
<p style="text-indent: 2em">可以看到，在这样的情况下，我们可以在一个jar包中包含任意多个tld文件。</p>
</span> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/flymz/blog/category/java%CC%E2%D0%CD">java题型</a>&nbsp;<a href="http://hi.baidu.com/flymz/blog/item/6c0df736aa8290340b55a920.html#comment">查看评论</a>]]></description>
        <pubDate>2008年07月07日 星期一  下午 12:17</pubDate>
        <category><![CDATA[java题型]]></category>
        <author><![CDATA[xiangsiwuchang]]></author>
		<guid>http://hi.baidu.com/flymz/blog/item/6c0df736aa8290340b55a920.html</guid>
</item>


</channel>
</rss>