??xml version="1.0" encoding="utf-8" standalone="yes"?>heyzo一本久久综合,久久夜色撩人精品,性高爱久久久久久久久http://www.aygfsteel.com/zxfahjz/category/10437.html软g开发相x面的学习zh-cnThu, 01 Mar 2007 19:10:33 GMTThu, 01 Mar 2007 19:10:33 GMT60java for循环http://www.aygfsteel.com/zxfahjz/archive/2006/12/05/85561.htmlzxfzxfTue, 05 Dec 2006 05:56:00 GMThttp://www.aygfsteel.com/zxfahjz/archive/2006/12/05/85561.htmlhttp://www.aygfsteel.com/zxfahjz/comments/85561.htmlhttp://www.aygfsteel.com/zxfahjz/archive/2006/12/05/85561.html#Feedback0http://www.aygfsteel.com/zxfahjz/comments/commentRss/85561.htmlhttp://www.aygfsteel.com/zxfahjz/services/trackbacks/85561.htmlslist.add("str1");
slist.add("str2");
slist.add("str3");
slist.add("str4");
slist.add("str5");
for(String tempStr:slist) {
   System.out.println(tempStr);
}

zxf 2006-12-05 13:56 发表评论
]]>
把三个文件放C个zip文g?/title><link>http://www.aygfsteel.com/zxfahjz/archive/2006/08/03/61600.html</link><dc:creator>zxf</dc:creator><author>zxf</author><pubDate>Thu, 03 Aug 2006 13:48:00 GMT</pubDate><guid>http://www.aygfsteel.com/zxfahjz/archive/2006/08/03/61600.html</guid><wfw:comment>http://www.aygfsteel.com/zxfahjz/comments/61600.html</wfw:comment><comments>http://www.aygfsteel.com/zxfahjz/archive/2006/08/03/61600.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zxfahjz/comments/commentRss/61600.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zxfahjz/services/trackbacks/61600.html</trackback:ping><description><![CDATA[ <p>import java.io.*;<br />import java.util.zip.*;<br />public class Example4 {<br />   //writing a zip archive<br />   static ZipOutputStream myZOS;</p> <p>   public static void main(String args[]) {<br />      myZOS = new ZipOutputStream (<br />                              new BufferedOutputStream(<br />                                       new FileOutputStream("code.zip")));<br />      writeOneFile("Example1.java");<br />      writeOneFile("Example2.java");<br />      writeOneFile("Example3.java");<br />      myZOS.close();<br />   }<br /><br />   static void writeOneFile(String name) throws IOException {<br />      ZipEntry myZE = new ZipEntry(name);<br />      myZOS.putNextEntry(myZE);<br />      <br />      BufferedReader myBR = new BufferedReader(new FileReader(name));<br />      int c;<br />      while((c = myBR.read()) != -1)//read a char until EOF<br />           myZOS.write(c);<br />       myBR.close();                                                       <br />   }<br />}</p> <img src ="http://www.aygfsteel.com/zxfahjz/aggbug/61600.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zxfahjz/" target="_blank">zxf</a> 2006-08-03 21:48 <a href="http://www.aygfsteel.com/zxfahjz/archive/2006/08/03/61600.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java入门——Java修饰词ȝhttp://www.aygfsteel.com/zxfahjz/archive/2006/06/22/54543.htmlzxfzxfThu, 22 Jun 2006 09:57:00 GMThttp://www.aygfsteel.com/zxfahjz/archive/2006/06/22/54543.htmlhttp://www.aygfsteel.com/zxfahjz/comments/54543.htmlhttp://www.aygfsteel.com/zxfahjz/archive/2006/06/22/54543.html#Feedback0http://www.aygfsteel.com/zxfahjz/comments/commentRss/54543.htmlhttp://www.aygfsteel.com/zxfahjz/services/trackbacks/54543.html词外q定义了5个不太常用的修饰词,下面是对q?1个Java修饰词的介绍Q?br />
1.public

使用对象Q类、接口、成?br />
介绍Q无论它所处在的包定义在哪Q该c(接口、成员)都是可访问的

2.private

使用对象Q成?br />
介绍Q成员只可以在定义它的类中被讉K

3.static

使用对象Q类、方法、字Dc初始化函数

介绍Q成名ؓstatic的内部类是一个顶U类Q它和包含类的成员是不相关的。静态方?br />是类ҎQ?br />
是被指向到所属的c而不是类的实例。静态字D|cdD,无论该字D|在的cdZ
多少实例Q该?br />
D只存在一个实例被指向到所属的c而不是类的实例。初始化函数是在装蝲cL执行
的,而不是在创徏

实例时执行的?br />
4.final

使用对象Q类、方法、字Dc变?br />
介绍Q被定义成final的类不允许出现子c,不能被覆盖(不应用于动态查询)Q字D?br />不允许被

修改?br />
5.abstract

使用对象Q类、接口、方?br />
介绍Q类中包括没有实现的ҎQ不能被实例化。如果是一个abstractҎQ则Ҏ?br />为空Q该?br />
法的实现在子cM被定义,q且包含一个abstractҎ的类必须是一个abstractc?br />
6.protected

使用对象Q成?br />
介绍Q成员只能在定义它的包中被访问,如果在其他包中被讉KQ则实现q个Ҏ的类
必须是该?br />
员所属类的子cR?br />
7.native

使用对象Q成?br />
介绍Q与操作q_相关Q定义时q不定义其方法,Ҏ的实现被一个外部的库实现?br />
8.strictfp

使用对象Q类、方?br />
介绍Qstrictfp修饰的类中所有的Ҏ都隐藏了strictfp修饰词,Ҏ执行的所有Q?br />计算遵守

IEEE 754标准Q所有取值包括中间的l果都必表CZؓfloat或doublecdQ而不能利?br />由本地^台Q

Ҏ式或g提供的额外精度或表示范围?br />
9.synchronized

使用对象Q方?br />
介绍Q对于一个静态的ҎQ在执行之前jvm把它所在的c锁定;对于一个非静态类的方
法,执行

前把某个特定对象实例锁定?br />
10.volatile

使用对象Q字D?br />
介绍Q因为异步线E可以访问字D,所以有些优化操作是一定不能作用在字段上的?br />volatile有时

可以代替synchronized?br />
11.transient

使用对象Q字D?br />
介绍Q字D不是对象持久状态的一部分Q不应该把字D和对象一起串赗?img src ="http://www.aygfsteel.com/zxfahjz/aggbug/54543.html" width = "1" height = "1" />

zxf 2006-06-22 17:57 发表评论
]]>
两种Java容器cList和Set分析http://www.aygfsteel.com/zxfahjz/archive/2006/06/22/54540.htmlzxfzxfThu, 22 Jun 2006 09:46:00 GMThttp://www.aygfsteel.com/zxfahjz/archive/2006/06/22/54540.htmlhttp://www.aygfsteel.com/zxfahjz/comments/54540.htmlhttp://www.aygfsteel.com/zxfahjz/archive/2006/06/22/54540.html#Feedback0http://www.aygfsteel.com/zxfahjz/comments/commentRss/54540.htmlhttp://www.aygfsteel.com/zxfahjz/services/trackbacks/54540.html
  Java2容器cȝ库的用途是“保存对象”,它分Zc: 

  Collection----一l独立的元素Q通常q些元素都服从某U规则。List必须保持元素特定的顺序,而Set不能有重复元素。?br />
  Map----一l成对的“键值对”对象,卛_元素是成对的对象Q最典型的应用就是数据字典,q且q有其它q泛的应用。另外,Map可以q回其所有键l成的Set和其所有值组成的CollectionQ或光值对l成的SetQƈ且还可以像数l一h展多lMapQ只要让Map中键值对的每个“值”是一个Map卛_。?br />
  1.q代器?br />
  q代器是一U设计模式,它是一个对象,它可以遍历ƈ选择序列中的对象Q而开发h员不需要了解该序列的底层结构。P代器通常被称为“轻量”对象,因ؓ创徏它的代h。?br />
  Java中的Iterator功能比较单,q且只能单向UdQ?br />
  (1) 使用Ҏiterator()要求容器q回一个Iterator。第一ơ调用Iterator的next()ҎӞ它返回序列的W一个元素。?br />
  (2) 使用next()获得序列中的下一个元素。?br />
  (3) 使用hasNext()查序列中是否q有元素。?br />
  (4) 使用remove()P代器新返回的元素删除。?br />
  Iterator是Javaq代器最单的实现QؓList设计的ListIteratorh更多的功能,它可以从两个方向遍历ListQ也可以从List中插入和删除元素。?br />
  2.List的功能方法?br />
  List(interface): ơ序是List最重要的特点;它确保维护元素特定的序。List为Collectiond了许多方法,使得能够向List中间插入与移除元?只推荐LinkedList使用)。一个List可以生成ListIteratorQ用它可以从两个方向遍历ListQ也可以从List中间插入和删除元素。?br />
  ArrayList: 由数l实现的List。它允许对元素进行快速随问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayListQ而不是用来插入和删除元素Q因比LinkedList开销要大很多。?br />
  LinkedList: 寚w序访问进行了优化Q向List中间插入与删除得开销不大Q随问则相对较慢(可用ArrayList代替)。它hҎaddFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast()Q这些方?没有在Q何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。?br />
  3.Set的功能方法?br />
  Set(interface): 存入Set的每个元素必L唯一的,因ؓSet不保存重复元素。加入Set的Object必须定义equals()Ҏ以确保对象的唯一性。Set与Collection有完全一L接口。Set接口不保证维护元素的ơ序。?br />
  HashSet: 为快速查找而设计的Set。存入HashSet的对象必d义hashCode()。?br />
  TreeSet: 保持ơ序的SetQ底层ؓ树结构。用它可以从Set中提取有序的序列。?br />
  LinkedHashSet: hHashSet的查询速度Q且内部使用链表l护元素的顺?插入的次?。于是在使用q代器遍历SetӞl果会按元素插入的次序显C。?br />
  HashSet采用散列函数对元素进行排序,q是专门为快速查询而设计的QTreeSet采用U黑树的数据l构q行排序元素QLinkedHashSet内部使用散列以加快查询速度Q同时用链表维护元素的ơ序Q得看h元素是以插入的顺序保存的。需要注意的是,生成自己的类ӞSet需要维护元素的存储序Q因此要实现Comparable接口q定义compareTo()Ҏ?img src ="http://www.aygfsteel.com/zxfahjz/aggbug/54540.html" width = "1" height = "1" />

zxf 2006-06-22 17:46 发表评论
]]>
javaE序操作mysqlҎ攉http://www.aygfsteel.com/zxfahjz/archive/2006/05/29/48765.htmlzxfzxfMon, 29 May 2006 07:55:00 GMThttp://www.aygfsteel.com/zxfahjz/archive/2006/05/29/48765.htmlhttp://www.aygfsteel.com/zxfahjz/comments/48765.htmlhttp://www.aygfsteel.com/zxfahjz/archive/2006/05/29/48765.html#Feedback0http://www.aygfsteel.com/zxfahjz/comments/commentRss/48765.htmlhttp://www.aygfsteel.com/zxfahjz/services/trackbacks/48765.html把表中的字段drop掉:alter table tableName drop strFieldName
昄表中所有的列:show COLUMNS from tableName
昄数据库中所有表Qshow tables from datebaseName

zxf 2006-05-29 15:55 发表评论
]]>
java中实现四舍五?/title><link>http://www.aygfsteel.com/zxfahjz/archive/2006/04/29/43966.html</link><dc:creator>zxf</dc:creator><author>zxf</author><pubDate>Sat, 29 Apr 2006 03:14:00 GMT</pubDate><guid>http://www.aygfsteel.com/zxfahjz/archive/2006/04/29/43966.html</guid><wfw:comment>http://www.aygfsteel.com/zxfahjz/comments/43966.html</wfw:comment><comments>http://www.aygfsteel.com/zxfahjz/archive/2006/04/29/43966.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zxfahjz/comments/commentRss/43966.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zxfahjz/services/trackbacks/43966.html</trackback:ping><description><![CDATA[public int getRound(double dSource){<br />int iRound<br />//BigDecimal的构造函数参数类型是double<br />BigDecimal deSource = new BigDecimal(dSource);<br />//deSource.setScale(0,BigDecimal.ROUND_HALF_UP) q回值类?BigDecimal<br />//intValue() ҎBigDecimal转化为int<br />iRound= deSource.setScale(0,BigDecimal.ROUND_HALF_UP).intValue();<br />return iRound;<br />} <br /><br /><p>java中解决百分比保留两位数q要求四舍五入的ҎQ?/p><p>例如Q?/p><p>DecimalFormat df1 = new DecimalFormat("##.00%");      <br />String a = df1.format(0.56566);<br />System.out.println(a);</p><p>l果>>56.57%</p><p>在网上找C下面q个文章觉得不错Q在q篇文章中找CҎ解决了这个问?</p><p>//--------------------------------------------------------------</p><p>//保留数点后两位数<br />public double Number2(double pDouble)<br />{<br />  BigDecimal  bd=new  BigDecimal(pDouble);<br />  BigDecimal  bd1=bd.setScale(2,bd.ROUND_HALF_UP);<br />  pDouble=bd1.doubleValue();<br />  long  ll = Double.doubleToLongBits(pDouble);<br />  <br />  return pDouble;<br />}</p><p>格式化输出数?br />译QCherami<br />email:cherami@163.net<br />原文Q?a >http://developer.java.sun.com/developer/TechTips/2000/tt0411.html</a><br /> * 格式化输出数?br />格式化输出数?br />有时我们需要控制输出的数字的格式,如何使用java的类库做到这个呢Q?br />也许你不兛_格式Q但是你需要关心你的程序可以在全世界通用Q像下面的这样一个简单的语句是依赖地区的Q?br />    System.out.println(1234.56);<br />在美国,"." 是小数点Q但在其它地方就不一定了。如何处理这个呢Q?/p><p>java.text 包中的一些包可以处理q类问题。下面的单范例用那些类解决上面提出的问题:</p><p>    import java.text.NumberFormat;</p><p>    import java.util.Locale;</p><p>    public class DecimalFormat1 {</p><p>        public static void main(String args[]) {</p><p>            // 得到本地的缺省格?/p><p>            NumberFormat nf1 = NumberFormat.getInstance();</p><p>            System.out.println(nf1.format(1234.56));</p><p>            // 得到德国的格?/p><p>            NumberFormat nf2 =</p><p>                NumberFormat.getInstance(Locale.GERMAN);</p><p>            System.out.println(nf2.format(1234.56));</p><p>        }</p><p>    }</p><p>如果你在国Q运行程序后输出Q?/p><p>    1,234.56</p><p>    1.234,56</p><p>换句话说Q在不同的地方用不同的习惯表示数字?/p><p>NumberFormat.getInstance()Ҏq回NumberFormat的一个实?实际上是NumberFormat具体的一个子c,例如DecimalFormat), q适合Ҏ本地讄格式化一个数字。你也可以用非~省的地|,例如德国。然后格式化ҎҎ特定的地则格式化数字。这个程序也可以使用一个简单的形式Q?/p><p>    NumberFormat.getInstance().format(1234.56)</p><p>但是保存一个格式然后重用更加有效。国际化是格式化数字时的一个大问题?/p><p>另一个是Ҏ式的有效控制Q例如指定小数部分的位数Q下面是解决q个问题的一个简单例子:</p><p>    import java.text.DecimalFormat;</p><p>    import java.util.Locale;</p><p>    public class DecimalFormat2 {</p><p>        public static void main(String args[]) {</p><p>            // 得到本地的缺省格?/p><p>            DecimalFormat df1 = new DecimalFormat("####.000");</p><p>            System.out.println(df1.format(1234.56));</p><p>            // 得到德国的格?/p><p>            Locale.setDefault(Locale.GERMAN);</p><p>            DecimalFormat df2 = new DecimalFormat("####.000");</p><p>            System.out.println(df2.format(1234.56));</p><p>        }</p><p>    }</p><p>在这个例子中讄了数字的格式Q用像"####.000"的符受这个模式意味着在小数点前有四个数字Q如果不够就I着Q小数点后有三位数字Q不用0补齐。程序的输出Q?/p><p>    1234.560</p><p>    1234,560</p><p>怼的,也可以控制指数Ş式的格式Q例如:</p><p>    import java.text.DecimalFormat;</p><p>    public class DecimalFormat3 {</p><p>        public static void main(String args[]) {</p><p>            DecimalFormat df = new DecimalFormat("0.000E0000");</p><p>            System.out.println(df.format(1234.56));</p><p>        }</p><p>    }</p><p>输出Q?/p><p>    1.235E0003</p><p>对于癑ֈ敎ͼ</p><p>    import java.text.NumberFormat;</p><p>    public class DecimalFormat4 {</p><p>        public static void main(String args[]) {</p><p>            NumberFormat nf = NumberFormat.getPercentInstance();</p><p>            System.out.println(nf.format(0.47));</p><p>        }</p><p>    }</p><p>输出Q?/p><p>    47%</p><p>xQ你已经看到了格式化数字的几个不同的技术。另一斚wQ如何读取ƈ解析包含格式化的数字的字W串Q解析支持包含在NumberFormat中。例如:</p><p>    import java.util.Locale;</p><p>    import java.text.NumberFormat;</p><p>    import java.text.ParseException;</p><p>    public class DecimalFormat5 {</p><p>        public static void main(String args[]) {</p><p>            // 本地格式</p><p>            NumberFormat nf1 = NumberFormat.getInstance();</p><p>            Object obj1 = null;</p><p>            // Z格式的解?/p><p>            try {</p><p>                obj1 = nf1.parse("1234,56");</p><p>            }</p><p>            catch (ParseException e1) {</p><p>                System.err.println(e1);</p><p>            }</p><p>            System.out.println(obj1);</p><p>            // 德国格式</p><p>            NumberFormat nf2 =</p><p>                NumberFormat.getInstance(Locale.GERMAN);</p><p>            Object obj2 = null;</p><p>            // Z格式的解?/p><p>            try {</p><p>                obj2 = nf2.parse("1234,56");</p><p>            }</p><p>            catch (ParseException e2) {</p><p>                System.err.println(e2);</p><p>            }</p><p>            System.out.println(obj2);</p><p>        }</p><p>    }</p><p>q个例子分两部分Q都是解析一个字W串Q?1234,56"。第一部分使用本地格式解析Q第二部分用d国格式解析。当E序在美国运行,l果是:</p><p>    123456</p><p>    1234.56</p><p>换句话说Q?1234,56"在美国被认ؓ是一个巨大的整数"123456"而在德国被认为是一个小?1234.56"?/p><p>q有格式化讨论的最后一个问题。在上面的例子中Q?DecimalFormat ?NumberFormat 都被使用了。DecimalFormat 常用于获得很好的格式控制Q而NumberFormat 常用于指定不同于本地的地区。如何结合两个类呢?</p><p>{案围绕着q样的事实:DecimalFormat是NumberFormat的一个子c?其实例被指定为特定的地区。因此,你可以用NumberFormat.getInstance 指定一个地区,然后结构强制{换ؓ一个DecimalFormat对象。文档中提到q个技术可以在大多情况下适用Q但是你需要用try/catch 块包围强制{换以防{换不能正常工?(大概在非怸明显得情况下使用一个奇异的地区)。下面是一个这L例子Q?/p><p>    import java.text.DecimalFormat;</p><p>    import java.text.NumberFormat;</p><p>    import java.util.Locale;</p><p>    public class DecimalFormat6 {</p><p>        public static void main(String args[]) {</p><p>            DecimalFormat df = null;</p><p>            // 得到一个NumberFormat 对象q?/p><p>            // 强制转换Z?DecimalFormat 对象</p><p>            try {</p><p>                df = (DecimalFormat)</p><p>                    NumberFormat.getInstance(Locale.GERMAN);</p><p>            }</p><p>            catch (ClassCastException e) {</p><p>                System.err.println(e);</p><p>            }</p><p>            // 讄格式模式</p><p>            df.applyPattern("####.00000");</p><p>            // format a number</p><p>            System.out.println(df.format(1234.56));</p><p>        }</p><p>    }</p><p> </p><p>getInstance() Ҏ获得格式Q然后调用applyPattern()Ҏ讄格式模式Q输出:</p><p>    1234,56000</p><p>如果你不兛_国际化,可以直接使用DecimalFormat ?/p><img src ="http://www.aygfsteel.com/zxfahjz/aggbug/43966.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zxfahjz/" target="_blank">zxf</a> 2006-04-29 11:14 <a href="http://www.aygfsteel.com/zxfahjz/archive/2006/04/29/43966.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat全攻?/title><link>http://www.aygfsteel.com/zxfahjz/archive/2006/04/28/43719.html</link><dc:creator>zxf</dc:creator><author>zxf</author><pubDate>Fri, 28 Apr 2006 02:05:00 GMT</pubDate><guid>http://www.aygfsteel.com/zxfahjz/archive/2006/04/28/43719.html</guid><wfw:comment>http://www.aygfsteel.com/zxfahjz/comments/43719.html</wfw:comment><comments>http://www.aygfsteel.com/zxfahjz/archive/2006/04/28/43719.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zxfahjz/comments/commentRss/43719.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zxfahjz/services/trackbacks/43719.html</trackback:ping><description><![CDATA[ <span id="wmqeeuq" class="atitle3">(一)Q?/span>安装及配|?br />安装--windowsq_<br />从tomcat|站下蝲<a target="_blank">jakarta-tomcat-4.0.1.exe</a>Q按照一般的windowsE序安装步骤卛_安装好tomcat,安装时它会自动寻找你的jdk和jre的位|?br /><p><span id="wmqeeuq" class="atitle3">(?Q配|?/span><br />q行tomcat需要设|JAVA_HOME变量</p><table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tbody><tr><td><pre><code>JAVA_HOME=c:/jdk</code></pre></td></tr></tbody></table><p><span id="wmqeeuq" class="atitle3">(?Q运?/span><br />讄完毕后就可以q行tomcat服务器了Q进入tomcat的bin目录Qwin98下用startup启动tomcatQlinux下用startup.shQ相应的关闭tomcat的命令ؓshutdown和shutdown.sh?/p><p>启动后可以在览器中输入<a href="http://localhost:8080/">http://localhost:8080/</a>试Q由于tomcat本nhweb服务器的功能Q因此我们不必安装apacheQ当然其也可以与apache集成C赗?br /></p><p>Q四Q?a id="3" name="3"><span id="wmqeeuq" class="atitle2">Q应?/span></a></p><p><span id="wmqeeuq" class="atitle3">(1):目录l构</span><br />tomcat的目录结构如下:</p><p></p><table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tbody><tr><td>目录?/td><td>?/td></tr><tr><td>bin</td><td>存放启动和关闭tomcat脚本</td></tr><tr><td>conf</td><td>包含不同的配|文?server.xml(Tomcat的主要配|文?和web.xml</td></tr><tr><td>work</td><td>存放jsp~译后生的class文g</td></tr><tr><td>webapp</td><td>存放应用E序CZQ以后你要部|的应用E序也要攑ֈ此目?/td></tr><tr><td>logs</td><td>存放日志文g</td></tr><tr><td>lib/japser/common</td><td>q三个目录主要存放tomcat所需的jar文g</td></tr></tbody></table><br /><span id="wmqeeuq" class="atitle3">(2)Qserver.xml配置?/span><br />下面我们讲q这个文件中的基本配|信息,更具体的配置信息见tomcat的文? <p></p><table cellspacing="0" cellpadding="0" width="80%" bgcolor="#cccccc" border="1"><tbody><tr><td width="27%">元素?/td><td width="21%">属?/td><td width="52%">解释</td></tr><tr><td width="27%" rowspan="2">server</td><td width="21%">port</td><td width="52%">指定一个端口,q个端口负责监听关闭tomcat的请?/td></tr><tr><td width="21%">shutdown</td><td width="52%">指定向端口发送的命o字符?/td></tr><tr><td width="27%">service</td><td width="21%">name</td><td width="52%">指定service的名?/td></tr><tr><td width="27%" rowspan="7">Connector<br />(表示客户端和service之间的连?</td><td width="21%">port</td><td width="52%">指定服务器端要创建的端口Pq在q个断口监听来自客户端的h</td></tr><tr><td width="21%">minProcessors</td><td width="52%">服务器启动时创徏的处理请求的U程?/td></tr><tr><td width="21%">maxProcessors</td><td width="52%">最大可以创建的处理h的线E数</td></tr><tr><td width="21%">enableLookups</td><td width="52%">如果为trueQ则可以通过调用request.getRemoteHost()q行DNS查询来得到远E客L的实际主机名Q若为false则不q行DNS查询Q而是q回其ip地址</td></tr><tr><td width="21%">redirectPort</td><td width="52%">指定服务器正在处理httph时收C一个SSL传输h后重定向的端口号</td></tr><tr><td width="21%">acceptCount</td><td width="52%">指定当所有可以用的处理h的线E数都被使用Ӟ可以攑ֈ处理队列中的h敎ͼ过q个数的h不予处?/td></tr><tr><td width="21%">connectionTimeout</td><td width="52%">指定时的时间数(以毫Uؓ单位)</td></tr><tr><td width="27%">Engine<br />(表示指定service中的h处理机,接收和处理来自Connector的请?</td><td width="21%">defaultHost</td><td width="52%">指定~省的处理请求的L名,它至与其中的一个host元素的name属性值是一L</td></tr><tr><td width="27%" rowspan="3">Context<br />(表示一个web应用E序Q通常为WAR文gQ关于WAR的具体信息见servlet规范)</td><td width="21%">docBase</td><td width="52%">应用E序的\径或者是WAR文g存放的\?/td></tr><tr><td width="21%">path</td><td width="52%">表示此web应用E序的url的前~Q这栯求的url为http://localhost:8080/path/****</td></tr><tr><td width="21%">reloadable</td><td width="52%">q个属性非帔R要,如果为trueQ则tomcat会自动检应用程序的/WEB-INF/lib ?WEB-INF/classes目录的变化,自动装蝲新的应用E序Q我们可以在不重起tomcat的情况下改变应用E序</td></tr><tr><td width="27%" rowspan="3"><p>host<br />(表示一个虚拟主?</p></td><td width="21%">name</td><td width="52%">指定L?/td></tr><tr><td width="21%">appBase</td><td width="52%">应用E序基本目录Q即存放应用E序的目?/td></tr><tr><td width="21%">unpackWARs</td><td width="52%">如果为trueQ则tomcat会自动将WAR文g解压Q否则不解压Q直接从WAR文g中运行应用程?/td></tr><tr><td rowspan="4"><p>Logger<br />(表示日志Q调试和错误信息)</p></td><td width="21%">className</td><td width="52%">指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口</td></tr><tr><td width="21%">prefix</td><td width="52%">指定log文g的前~</td></tr><tr><td width="21%">suffix</td><td width="52%">指定log文g的后~</td></tr><tr><td width="21%">timestamp</td><td width="52%">如果为trueQ则log文g名中要加入时_如下?localhost_log.2001-10-04.txt</td></tr><tr><td width="27%"><p>Realm<br />(表示存放用户名,密码及role的数据库)</p></td><td width="21%">className</td><td width="52%">指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口</td></tr><tr><td rowspan="3"><p>Valve<br />(功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一?</p></td><td width="21%">className</td><td width="52%"><p>指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValvecd以记录应用程序的讉K信息</p></td></tr><tr><td width="21%">directory</td><td width="52%">指定log文g存放的位|?/td></tr><tr><td width="21%">pattern</td><td width="52%">有两个|common方式记录q程L名或ip地址Q用户名Q日期,W一行请求的字符ԌHTTP响应代码Q发送的字节数。combined方式比common方式记录的值更?/td></tr></tbody></table><p>注意Q?Q经q我试Q我讄Context 的path="",reloadable=trueQ然后放一个WAR文g到webapps目录Q结果tomcat不能出此文?重vtomcat可以)Q而把此文件解压,则tomcat会自动检出q个新的应用E序。如果不能自动检WAR文gQ我们可以利用下面管理中讲的Ҏ来部|应用程序?/p><p>2Q默认的server.xml中,Realm元素只设|了一个className属性,但此文g中也包含几个通过JDBCq接到数据库q行验证的示?被注释掉?Q通过Realm元素我们可以实现容器安全理(Container Managed Security)?/p><p>3Q还有一些元素我们没有介l,如ParameterQloaderQ你可以通过tomcat的文档获取这些元素的信息?/p><p><span id="wmqeeuq" class="atitle3">(3)Q管?/span></p><p><b>1Q配|?/b><br />在进行具体的理之前Q我们先ltomcatd一个用P使这个用h权限来进行管理?/p><p>打开conf目录下的tomcat-users.xml文gQ在相应的位|添加下面一行:</p><p></p><table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tbody><tr><td><pre><code><user name="zf" password="zf" roles="standard,manager"/> </code></pre></td></tr></tbody></table><p>注意Q这一行的最后部分一定是/>,tomcat的文档掉?W号Q如果没?W号的话Qtomcat重v时将无法讉K应用E序。通过logs/catalina.out文g你可以看到这个错误的详细信息?/p><p>然后重vtomcatQ在览器中输入http://localhost:8080/manager/Q会弹出对话框,输入上面的用户名和密码即可?/p><p><b>2Q应用程序列?/b><br />在浏览器中输入http://localhost:8080/manager/listQ浏览器会昄如下的信息:</p><p></p><table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tbody><tr><td><pre><code>OK - Listed applications for virtual host localhost /ex:running:1 /examples:running:1 /webdav:running:0 /tomcat-docs:running:0 /manager:running:0 /:running:0</code></pre></td></tr></tbody></table><p>面的信息分别为应用程序的路径Q当前状?running 或者stopped)Q与q个E序相连的session数?/p><p><b>3Q重新装载应用程?/b><br />在浏览器中输?http://localhost:8080/manager/reload?path=/examplesQ浏览器昄如下Q?/p><p></p><table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tbody><tr><td><pre><code>OK - Reloaded application at context path /examples </code></pre></td></tr></tbody></table><p>表示example应用E序装蝲成功Q如果我们将server.xml的Context元素的reloadable属性设为true(见上面表?Q则没必要利用这U方式重新装载应用程序,因ؓtomcat会自动装载?/p><p><b>4Q显Csession信息</b><br />在浏览器中输入http://localhost:8080/manager/sessions?path=/examplesQ浏览器昄如下Q?/p><p></p><table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tbody><tr><td><pre><code>OK - Session information for application at context path /examples Default maximum session inactive interval 30 minutes </code></pre></td></tr></tbody></table><p><b>5Q启动和关闭应用E序</b><br />在浏览器中输入http://localhost:8080/manager/start?path=/examples和http://localhost:8080/manager/stop?path=/examples分别启动和关闭examples应用E序?/p><p><b>6Q部|及撤销部v</b><br />WAR有两U组l方式,一U是按一定的目录l构l织文gQ一U是一个后~为WAR的压~包Q因此它的部|方式也有两U:<br />(1)Q在览器中输入Q?code>http://localhost:8080/manager/install?path=/examples&war=file:/c:\examples</code><br />׃按目录l构l织的WAR部v</p><p>(2)Q如果输?<code>http://localhost:8080/manager/install?path=/examples&war=jar:file:/c:\examples.war!/</code><br />׃按压羃包组l的WAR部vQ注意此url后半部分一定要?/受?/p><p>部v后就可以?http://localhost:8080/examples讉K了?/p><p>在浏览器中输入:<code>http://localhost:8080/manager/remove?path=/examples</code><br />׃撤销刚才部v的应用程序?/p><p><span id="wmqeeuq" class="atitle3">(4)Q与apache集成</span><br />虽然tomcat也可以作web服务?但其处理静态html的速度比不上apache,且其作ؓweb服务器的功能q不如apache,因此我们xapache和tomcat集成h?/p><p>我们以linuxpȝZ介绍.</p><p>从apache|站下蝲<a target="_blank"><font color="#002c99">apache1.3.22源代码版?/font></a>Q然后用如下命令配|安装apacheQ?/p><p></p><table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tbody><tr><td><pre><code>mkdir /usr/local/apache tar zxvf apache.1.32.tar.gz cd apache.1.32 ./configure --prefix=/usr/local/apache --enable-module=so make make install </code></pre></td></tr></tbody></table><p>注意configure命o指定目标安装目录Qƈ且加入DSO(Dynamic Shared Object)支持Q注意一定不要忘了这一个选项?/p><p>然后下蝲<a target="_blank"><font color="#002c99">webapp模块</font></a>Q将解压后mod_webapp.so文g攑օapache的libexec目录Q编辑apache的conf目录下的httpd.confQ在q个文g的最后加入下面三行:</p><p></p><table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tbody><tr><td><pre><code>LoadModule webapp_module libexec/mod_webapp.so WebAppConnection warpConnection warp localhost:8008 WebAppDeploy examples warpConnection /examples/ </code></pre></td></tr></tbody></table><p>W一行是加入webapp模块Q如果编译apache时不增加DSO支持Q则无法使用LoadModule指oQ第二行指定tomcat与apache的连接,W三行指定部|那个应用,q两个指令用格式如下:</p><p></p><table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tbody><tr><td><pre><code>WebAppConnection [connection name] [provider] [host:port] WebAppDeploy [application name] [connection name] [url path] </code></pre></td></tr></tbody></table><br />其中connection name指定q接名,provider只能是warpQport端口与你的tomcat的配|文件server.xml最后几行指定的要保持一致。文件如下: <p></p><table cellspacing="0" cellpadding="5" width="100%" bgcolor="#cccccc" border="1"><tbody><tr><td><pre><code><Service name="Tomcat-Apache"> <Connector className="org.apache.catalina.connector.warp.WarpConnector" port="8008" minProcessors="5" maxProcessors="75" enableLookups="true" acceptCount="10" debug="0"/> ****** </Service> </code></pre></td></tr></tbody></table><br />application name与你在tomcat中部|的应用名一_url path指定讉Kq个应用的url。例如上面的例子可以通过http://localhost/examples/来访问tomcat中的examples应用? <p><span id="wmqeeuq" class="atitle3">(5)Q中文问?/span><br />一般jsp的ؕ码问题可以通过在jsp中加?lt;%@ page contentType="text/html;charset=GB2312" %>来解冻I至于servlet的ؕ码在可以使用servlet2.3中提供的HttpServeletRequest.setCharacterEncoding函数。更详细的中文问题请?a target="_blank"><font color="#002c99">JSP/Servlet 中的汉字~码问题</font></a>?/p><p><a id="4" name="4"><span id="wmqeeuq" class="atitle2">四:lD</span></a><br />tomcat作ؓ一个servlet(jsp也被~译为servlet执行)容器Q其应用前景是非常好的,如果?a target="_blank"><font color="#002c99">jboss</font></a>l合hQ则可以实现sun的j2ee规范(用jboss作ejb服务?。jboss的官方网站也提供集成了tomcat3.2*的jboss以供下蝲。另外一个开源的应用服务?<a target="_blank"><font color="#002c99">enhydra</font></a>) 也是Ztomcat的,其提供了更友好的理界面Q部|应用程序也更简单,功能也更强大?/p><img src ="http://www.aygfsteel.com/zxfahjz/aggbug/43719.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zxfahjz/" target="_blank">zxf</a> 2006-04-28 10:05 <a href="http://www.aygfsteel.com/zxfahjz/archive/2006/04/28/43719.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Java中文件处?/title><link>http://www.aygfsteel.com/zxfahjz/archive/2006/04/19/41932.html</link><dc:creator>zxf</dc:creator><author>zxf</author><pubDate>Wed, 19 Apr 2006 08:11:00 GMT</pubDate><guid>http://www.aygfsteel.com/zxfahjz/archive/2006/04/19/41932.html</guid><wfw:comment>http://www.aygfsteel.com/zxfahjz/comments/41932.html</wfw:comment><comments>http://www.aygfsteel.com/zxfahjz/archive/2006/04/19/41932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/zxfahjz/comments/commentRss/41932.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/zxfahjz/services/trackbacks/41932.html</trackback:ping><description><![CDATA[ <div id="wmqeeuq" class="postText"> <p> <font size="3">1.如何获得当前文g路径</font> </p> <p> <font size="3">常用Q?/font> </p> <p> <font size="3">字符串类型:System.getProperty("user.dir");</font> </p> <p> <font size="3">l合Q?/font> </p> <p> <font size="3">package com.zcjl.test.base;<br />import java.io.File;<br />public class Test {<br />    public static void main(String[] args) throws Exception {<br />        System.out.println(</font> <font size="3"> <font color="#ff0000">Thread.currentThread().getContextClassLoader().getResource(""));<br />        System.out.println(Test.class.getClassLoader().getResource(""));<br />        System.out.println(ClassLoader.getSystemResource(""));<br />        System.out.println(Test.class.getResource(""));<br />        System.out.println(Test.class.getResource("/"));<br />        System.out.println(new File("").getAbsolutePath());<br />        System.out.println(System.getProperty("user.dir"));</font> <br />    }<br />}</font> </p> <p> <font size="3">2.Web服务?/font> </p> <p> <font size="3">(1).Weblogic</font> </p> <p> <font size="3">WebApplication的系l文件根目录是你的weblogic安装所在根目录?br />例如Q如果你的weblogic安装在c:\bea\weblogic700.....<br />那么Q你的文件根路径是c:\.<br />所以,有两U方式能够让你访问你的服务器端的文gQ?br />a.使用l对路径Q?br />比如你的参数文件放在c:\yourconfig\yourconf.propertiesQ?br />直接使用 new FileInputStream("yourconfig/yourconf.properties");<br />b.使用相对路径Q?br />相对路径的根目录是你的webapplication的根路径Q即WEB-INF的上一U目录,你的参数文件放在yourwebapp\yourconfig\yourconf.propertiesQ?br />q样使用Q?br />new FileInputStream("./yourconfig/yourconf.properties");<br />q两U方式均可,自己选择?/font> </p> <p> <font size="3">(2).Tomcat</font> </p> <p> <font size="3">在类中输出System.getProperty("user.dir");昄的是%Tomcat_Home%/bin</font> </p> <p> <font size="3">(3).Resin</font> </p> <p> <font size="3">不是你的JSP攄相对路径,是JSP引擎执行q个JSP~译成SERVLET<br />的\径ؓ?比如用新建文件法试File f = new File("a.htm");<br />q个a.htm在resin的安装目录下 </font> </p> <p> <font color="#ff0000" size="3">(4).如何ȝ对\径哪Q?/font> </p> <p> <font color="#ff0000" size="3">在Java文g中getResource或getResourceAsStream均可</font> </p> <p> <font color="#ff0000" size="3">例:getClass().getResourceAsStream(filePath);//filePath可以?/filename",q里?代表web发布根\径下WEB-INF/classes</font> </p> <p> <font size="3">(5).获得文g真实路径</font> </p> <p> <font size="3">string  file_real_path=request.getRealPath("mypath/filename");  </font> </p> <p> <font size="3">通常使用request.getRealPath("/");  </font> </p> <p> <font size="3">3.文g操作的类</font> </p> <p> <font size="3">import java.io.*;<br />import java.net.*;<br />import java.util.*;<br />//import javax.swing.filechooser.*;<br />//import org.jr.swing.filter.*;</font> </p> <p> <font size="3">/**<br />* 此类中封装一些常用的文g操作?br />* 所有方法都是静态方法,不需要生成此cȝ实例Q?br />* 为避免生成此cȝ实例Q构造方法被x为privatecd的?br />* @since  0.1<br />*/</font> </p> <p> <font size="3">public class FileUtil {<br />  /**<br />   * U有构造方法,防止cȝ实例化,因ؓ工具cM需要实例化?br />   */<br />  private FileUtil() {</font> </p> <p> <font size="3">  }</font> </p> <p> <font size="3">  /**<br />   * 修改文g的最后访问时间?br />   * 如果文g不存在则创徏该文件?br />   * <b>目前q个Ҏ的行为方式还不稳定,主要是方法有些信息输出,q些信息输出是否保留q在?/font> </p> <p> <font size="3">虑中?lt;/b><br />   * @param file 需要修Ҏ后访问时间的文g?br />   * @since  0.1<br />   */<br />  public static void touch(File file) {<br />    long currentTime = System.currentTimeMillis();<br />    if (!file.exists()) {<br />      System.err.println("file not found:" + file.getName());<br />      System.err.println("Create a new file:" + file.getName());<br />      try {<br />        if (file.createNewFile()) {<br />        //  System.out.println("Succeeded!");<br />        }<br />        else {<br />        //  System.err.println("Create file failed!");<br />        }<br />      }<br />      catch (IOException e) {<br />      //  System.err.println("Create file failed!");<br />        e.printStackTrace();<br />      }<br />    }<br />    boolean result = file.setLastModified(currentTime);<br />    if (!result) {<br />    //  System.err.println("touch failed: " + file.getName());<br />    }<br />  }</font> </p> <p> <font size="3">  /**<br />   * 修改文g的最后访问时间?br />   * 如果文g不存在则创徏该文件?br />   * <b>目前q个Ҏ的行为方式还不稳定,主要是方法有些信息输出,q些信息输出是否保留q在?/font> </p> <p> <font size="3">虑中?lt;/b><br />   * @param fileName 需要修Ҏ后访问时间的文g的文件名?br />   * @since  0.1<br />   */<br />  public static void touch(String fileName) {<br />    File file = new File(fileName);<br />    touch(file);<br />  }</font> </p> <p> <font size="3">  /**<br />   * 修改文g的最后访问时间?br />   * 如果文g不存在则创徏该文件?br />   * <b>目前q个Ҏ的行为方式还不稳定,主要是方法有些信息输出,q些信息输出是否保留q在?/font> </p> <p> <font size="3">虑中?lt;/b><br />   * @param files 需要修Ҏ后访问时间的文g数组?br />   * @since  0.1<br />   */<br />  public static void touch(File[] files) {<br />    for (int i = 0; i < files.length; i++) {<br />      touch(files);<br />    }<br />  }</font> </p> <p> <font size="3">  /**<br />   * 修改文g的最后访问时间?br />   * 如果文g不存在则创徏该文件?br />   * <b>目前q个Ҏ的行为方式还不稳定,主要是方法有些信息输出,q些信息输出是否保留q在?/font> </p> <p> <font size="3">虑中?lt;/b><br />   * @param fileNames 需要修Ҏ后访问时间的文g名数l?br />   * @since  0.1<br />   */<br />  public static void touch(String[] fileNames) {<br />    File[] files = new File[fileNames.length];<br />    for (int i = 0; i < fileNames.length; i++) {<br />      files = new File(fileNames);<br />    }<br />    touch(files);<br />  }</font> </p> <p> <font size="3">  /**<br />   * 判断指定的文件是否存在?br />   * @param fileName 要判断的文g的文件名<br />   * @return 存在时返回trueQ否则返回false?br />   * @since  0.1<br />   */<br />  public static boolean isFileExist(String fileName) {<br />    return new File(fileName).isFile();<br />  }</font> </p> <p> <font size="3">  /**<br />   * 创徏指定的目录?br />   * 如果指定的目录的父目录不存在则创建其目录书上所有需要的父目录?br />   * <b>注意Q可能会在返回false的时候创建部分父目录?lt;/b><br />   * @param file 要创建的目录<br />   * @return 完全创徏成功时返回trueQ否则返回false?br />   * @since  0.1<br />   */<br />  public static boolean makeDirectory(File file) {<br />    File parent = file.getParentFile();<br />    if (parent != null) {<br />      return parent.mkdirs();<br />    }<br />    return false;<br />  }</font> </p> <p> <font size="3">  /**<br />   * 创徏指定的目录?br />   * 如果指定的目录的父目录不存在则创建其目录书上所有需要的父目录?br />   * <b>注意Q可能会在返回false的时候创建部分父目录?lt;/b><br />   * @param fileName 要创建的目录的目录名<br />   * @return 完全创徏成功时返回trueQ否则返回false?br />   * @since  0.1<br />   */<br />  public static boolean makeDirectory(String fileName) {<br />    File file = new File(fileName);<br />    return makeDirectory(file);<br />  }</font> </p> <p> <font size="3">  /**<br />   * 清空指定目录中的文g?br />   * q个Ҏ尽可能删除所有的文gQ但是只要有一个文件没有被删除都会q回false?br />   * 另外q个Ҏ不会q代删除Q即不会删除子目录及其内宏V?br />   * @param directory 要清I的目录<br />   * @return 目录下的所有文仉被成功删除时q回trueQ否则返回false.<br />   * @since  0.1<br />   */<br />  public static boolean emptyDirectory(File directory) {<br />    boolean result = false;<br />    File[] entries = directory.listFiles();<br />    for (int i = 0; i < entries.length; i++) {<br />      if (!entries.delete()) {<br />        result = false;<br />      }<br />    }<br />    return true;<br />  }</font> </p> <p> <font size="3">  /**<br />   * 清空指定目录中的文g?br />   * q个Ҏ尽可能删除所有的文gQ但是只要有一个文件没有被删除都会q回false?br />   * 另外q个Ҏ不会q代删除Q即不会删除子目录及其内宏V?br />   * @param directoryName 要清I的目录的目录名<br />   * @return 目录下的所有文仉被成功删除时q回trueQ否则返回false?br />   * @since  0.1<br />   */<br />  public static boolean emptyDirectory(String directoryName) {<br />    File dir = new File(directoryName);<br />    return emptyDirectory(dir);<br />  }</font> </p> <p> <font size="3">  /**<br />   * 删除指定目录及其中的所有内宏V?br />   * @param dirName 要删除的目录的目录名<br />   * @return 删除成功时返回trueQ否则返回false?br />   * @since  0.1<br />   */<br />  public static boolean deleteDirectory(String dirName) {<br />    return deleteDirectory(new File(dirName));<br />  }</font> </p> <p> <font size="3">  /**<br />   * 删除指定目录及其中的所有内宏V?br />   * @param dir 要删除的目录<br />   * @return 删除成功时返回trueQ否则返回false?br />   * @since  0.1<br />   */<br />  public static boolean deleteDirectory(File dir) {<br />    if ( (dir == null) || !dir.isDirectory()) {<br />      throw new IllegalArgumentException("Argument " + dir +<br />                                         " is not a directory. ");<br />    }</font> </p> <p> <font size="3">    File[] entries = dir.listFiles();<br />    int sz = entries.length;</font> </p> <p> <font size="3">    for (int i = 0; i < sz; i++) {<br />      if (entries.isDirectory()) {<br />        if (!deleteDirectory(entries)) {<br />          return false;<br />        }<br />      }<br />      else {<br />        if (!entries.delete()) {<br />          return false;<br />        }<br />      }<br />    }</font> </p> <p> <font size="3">    if (!dir.delete()) {<br />      return false;<br />    }<br />    return true;<br />  }</font> </p> <p> <br /> <font size="3">  /**<br />   * q回文g的URL地址?br />   * @param file 文g<br />   * @return 文g对应的的URL地址<br />   * @throws MalformedURLException<br />   * @since  0.4<br />   * @deprecated 在实现的时候没有注意到FilecLw带一个toURLҎ文件\径{换ؓURL?br />   *             请用File.toURLҎ?br />   */<br />  public static URL getURL(File file) throws MalformedURLException {<br />    String fileURL = "file:/" + file.getAbsolutePath();<br />    URL url = new URL(fileURL);<br />    return url;<br />  }</font> </p> <p> <font size="3">  /**<br />   * 从文件\径得到文件名?br />   * @param filePath 文g的\径,可以是相对\径也可以是绝对\?br />   * @return 对应的文件名<br />   * @since  0.4<br />   */<br />  public static String getFileName(String filePath) {<br />    File file = new File(filePath);<br />    return file.getName();<br />  }</font> </p> <p> <font size="3">  /**<br />   * 从文件名得到文gl对路径?br />   * @param fileName 文g?br />   * @return 对应的文件\?br />   * @since  0.4<br />   */<br />  public static String getFilePath(String fileName) {<br />    File file = new File(fileName);<br />    return file.getAbsolutePath();<br />  }</font> </p> <p> <font size="3">  /**<br />   * DOS/Windows格式的\径{换ؓUNIX/Linux格式的\径?br />   * 其实是\径中?\"全部换ؓ"/"Q因为在某些情况下我们{换ؓq种方式比较方便Q?br />   * 某中E度上说"/"?\"更适合作ؓ路径分隔W,而且DOS/Windows也将它当作\径分隔符?br />   * @param filePath 转换前的路径<br />   * @return 转换后的路径<br />   * @since  0.4<br />   */<br />  public static String toUNIXpath(String filePath) {<br />    return filePath.replace('\\', '/');<br />  }</font> </p> <p> <font size="3">  /**<br />   * 从文件名得到UNIX风格的文件绝对\径?br />   * @param fileName 文g?br />   * @return 对应的UNIX风格的文件\?br />   * @since  0.4<br />   * @see #toUNIXpath(String filePath) toUNIXpath<br />   */<br />  public static String getUNIXfilePath(String fileName) {<br />    File file = new File(fileName);<br />    return toUNIXpath(file.getAbsolutePath());<br />  }</font> </p> <p> <font size="3">  /**<br />   * 得到文g的类型?br />   * 实际上就是得到文件名中最后一个?”后面的部分?br />   * @param fileName 文g?br />   * @return 文g名中的类型部?br />   * @since  0.5<br />   */<br />  public static String getTypePart(String fileName) {<br />    int point = fileName.lastIndexOf('.');<br />    int length = fileName.length();<br />    if (point == -1 || point == length - 1) {<br />      return "";<br />    }<br />    else {<br />      return fileName.substring(point + 1, length);<br />    }<br />  }</font> </p> <p> <font size="3">  /**<br />   * 得到文g的类型?br />   * 实际上就是得到文件名中最后一个?”后面的部分?br />   * @param file 文g<br />   * @return 文g名中的类型部?br />   * @since  0.5<br />   */<br />  public static String getFileType(File file) {<br />    return getTypePart(file.getName());<br />  }</font> </p> <p> <font size="3">  /**<br />   * 得到文g的名字部分?br />   * 实际上就是\径中的最后一个\径分隔符后的部分?br />   * @param fileName 文g?br />   * @return 文g名中的名字部?br />   * @since  0.5<br />   */<br />  public static String getNamePart(String fileName) {<br />    int point = getPathLsatIndex(fileName);<br />    int length = fileName.length();<br />    if (point == -1) {<br />      return fileName;<br />    }<br />    else if (point == length - 1) {<br />      int secondPoint = getPathLsatIndex(fileName, point - 1);<br />      if (secondPoint == -1) {<br />        if (length == 1) {<br />          return fileName;<br />        }<br />        else {<br />          return fileName.substring(0, point);<br />        }<br />      }<br />      else {<br />        return fileName.substring(secondPoint + 1, point);<br />      }<br />    }<br />    else {<br />      return fileName.substring(point + 1);<br />    }<br />  }</font> </p> <p> <font size="3">  /**<br />   * 得到文g名中的父路径部分?br />   * 对两U\径分隔符都有效?br />   * 不存在时q回""?br />   * 如果文g名是以\径分隔符l尾的则不考虑该分隔符Q例?/path/"q回""?br />   * @param fileName 文g?br />   * @return 父\径,不存在或者已l是父目录时q回""<br />   * @since  0.5<br />   */<br />  public static String getPathPart(String fileName) {<br />    int point = getPathLsatIndex(fileName);<br />    int length = fileName.length();<br />    if (point == -1) {<br />      return "";<br />    }<br />    else if (point == length - 1) {<br />      int secondPoint = getPathLsatIndex(fileName, point - 1);<br />      if (secondPoint == -1) {<br />        return "";<br />      }<br />      else {<br />        return fileName.substring(0, secondPoint);<br />      }<br />    }<br />    else {<br />      return fileName.substring(0, point);<br />    }<br />  }</font> </p> <p> <font size="3">  /**<br />   * 得到路径分隔W在文g路径中首ơ出现的位置?br />   * 对于DOS或者UNIX风格的分隔符都可以?br />   * @param fileName 文g路径<br />   * @return 路径分隔W在路径中首ơ出现的位置Q没有出现时q回-1?br />   * @since  0.5<br />   */<br />  public static int getPathIndex(String fileName) {<br />    int point = fileName.indexOf('/');<br />    if (point == -1) {<br />      point = fileName.indexOf('\\');<br />    }<br />    return point;<br />  }</font> </p> <p> <font size="3">  /**<br />   * 得到路径分隔W在文g路径中指定位|后首次出现的位|?br />   * 对于DOS或者UNIX风格的分隔符都可以?br />   * @param fileName 文g路径<br />   * @param fromIndex 开始查扄位置<br />   * @return 路径分隔W在路径中指定位|后首次出现的位|,没有出现时返?1?br />   * @since  0.5<br />   */<br />  public static int getPathIndex(String fileName, int fromIndex) {<br />    int point = fileName.indexOf('/', fromIndex);<br />    if (point == -1) {<br />      point = fileName.indexOf('\\', fromIndex);<br />    }<br />    return point;<br />  }</font> </p> <p> <font size="3">  /**<br />   * 得到路径分隔W在文g路径中最后出现的位置?br />   * 对于DOS或者UNIX风格的分隔符都可以?br />   * @param fileName 文g路径<br />   * @return 路径分隔W在路径中最后出现的位置Q没有出现时q回-1?br />   * @since  0.5<br />   */<br />  public static int getPathLsatIndex(String fileName) {<br />    int point = fileName.lastIndexOf('/');<br />    if (point == -1) {<br />      point = fileName.lastIndexOf('\\');<br />    }<br />    return point;<br />  }</font> </p> <p> <font size="3">  /**<br />   * 得到路径分隔W在文g路径中指定位|前最后出现的位置?br />   * 对于DOS或者UNIX风格的分隔符都可以?br />   * @param fileName 文g路径<br />   * @param fromIndex 开始查扄位置<br />   * @return 路径分隔W在路径中指定位|前最后出现的位置Q没有出现时q回-1?br />   * @since  0.5<br />   */<br />  public static int getPathLsatIndex(String fileName, int fromIndex) {<br />    int point = fileName.lastIndexOf('/', fromIndex);<br />    if (point == -1) {<br />      point = fileName.lastIndexOf('\\', fromIndex);<br />    }<br />    return point;<br />  }</font> </p> <p> <font size="3">  /**<br />   * 文件名中的cd部分L?br />   * @param filename 文g?br />   * @return Lcd部分的结?br />   * @since  0.5<br />   */<br />  public static String trimType(String filename) {<br />    int index = filename.lastIndexOf(".");<br />    if (index != -1) {<br />      return filename.substring(0, index);<br />    }<br />    else {<br />      return filename;<br />    }<br />  }<br />  /**<br />   * 得到相对路径?br />   * 文g名不是目录名的子节点时返回文件名?br />   * @param pathName 目录?br />   * @param fileName 文g?br />   * @return 得到文g名相对于目录名的相对路径Q目录下不存在该文g时返回文件名<br />   * @since  0.5<br />   */<br />  public static String getSubpath(String pathName,String fileName) {<br />    int index = fileName.indexOf(pathName);<br />    if (index != -1) {<br />      return fileName.substring(index + pathName.length() + 1);<br />    }<br />    else {<br />      return fileName;<br />    }<br />  }</font> </p> <p> <font size="3">}<br /> 4.遗留问题</font> </p> <p> <font size="3">目前new FileInputStream()只会使用l对路径Q相Ҏ用过Q因相对于web服务器地址Q比较麻?/font> </p> <p> <font size="3">q不如写个配|文件来的快?/font> </p> <p> <font size="3">5.按Java文gcd分类d配置文g</font> </p> <div id="wmqeeuq" class="storycontent"> <p> <font size="3">配置文g是应用系l中不可~少的,可以增加E序的灵zL。java.util.Properties是从jdk1.2有的类Q一直到现在都支持load ()ҎQjdk1.4以后save(output,string) ->store(output,string)。如果只是单U的读,Ҏ不存在烦恼的问题。web层可以通过 Thread.currentThread().getContextClassLoader().<br />getResourceAsStream("xx.properties") 获取QApplication可以通过new FileInputStream("xx.properties");直接在classes一U获取。关键是有时我们需要通过web修改配置文gQ我们不能将路径写死了。经q测试觉得有以下心得Q?/font> </p> <p> <font size="3">1.servlet中读写。如果运用Struts 或者Servlet可以直接在初始化参数中配|,调用时根据servlet的getRealPath("/")获取真实路径Q再ҎString file = this.servlet.getInitParameter("abc");获取相对的WEB-INF的相对\径?br />例:<br />InputStream input = Thread.currentThread().getContextClassLoader().<br />getResourceAsStream("abc.properties");<br />Properties prop = new Properties();<br />prop.load(input);<br />input.close();<br />OutputStream out = new FileOutputStream(path);<br />prop.setProperty("abc", “test");<br />prop.store(out, “–test?);<br />out.close();</font> </p> <p> <font size="3">2.直接在jsp中操作,通过jsp内置对象获取可操作的l对地址?br />例:<br />// jsp面<br />String path = pageContext.getServletContext().getRealPath("/");<br />String realPath = path+"/WEB-INF/classes/abc.properties";</font> </p> <p> <font size="3">//java E序<br />InputStream in = getClass().getClassLoader().getResourceAsStream("abc.properties"); // abc.properties攑֜webroot/WEB-INF/classes/目录?br />prop.load(in);<br />in.close();</font> </p> <p> <font size="3">OutputStream out = new FileOutputStream(path); // path为通过面传入的\?br />prop.setProperty("abc", “abcccccc");<br />prop.store(out, “–test?);<br />out.close();</font> </p> <p> <font size="3">3.只通过JavaE序操作资源文g<br />InputStream in = new FileInputStream("abc.properties"); // 攑֜classes同</font> </p> <p> <font size="3">OutputStream out = new FileOutputStream("abc.properties");</font> </p> </div> </div> <img src ="http://www.aygfsteel.com/zxfahjz/aggbug/41932.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/zxfahjz/" target="_blank">zxf</a> 2006-04-19 16:11 <a href="http://www.aygfsteel.com/zxfahjz/archive/2006/04/19/41932.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ӳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">»</a>| <a href="http://" target="_blank">Ͼ</a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank">ϻ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">彧</a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ұ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">ֳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ƕ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϴ</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">Ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>