﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-yezhou-文章分类-Java技术文档</title><link>http://www.blogjava.net/yezhou/category/10353.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 07:40:47 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 07:40:47 GMT</pubDate><ttl>60</ttl><item><title>java中日期、日期格式、日期的解析和日期的计算</title><link>http://www.blogjava.net/yezhou/articles/55462.html</link><dc:creator>叶舟</dc:creator><author>叶舟</author><pubDate>Wed, 28 Jun 2006 01:35:00 GMT</pubDate><guid>http://www.blogjava.net/yezhou/articles/55462.html</guid><wfw:comment>http://www.blogjava.net/yezhou/comments/55462.html</wfw:comment><comments>http://www.blogjava.net/yezhou/articles/55462.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yezhou/comments/commentRss/55462.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yezhou/services/trackbacks/55462.html</trackback:ping><description><![CDATA[
		<p>Java 语言的Calendar(日历),Date(日期), 和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分. 日期是商业逻辑计算一个关键的部分. 所有的开发者都应该能够计算未来的日期, 定制日期的显示格式, 并将文本数据解析成日期对象. 我们写了两篇文章, 这是第一篇, 我们将大概的学习日期, 日期格式, 日期的解析和日期的计算. <br /><br />我们将讨论下面的类: <br /><br />1、具体类(和抽象类相对)java.util.Date <br />2、抽象类java.text.DateFormat 和它的一个具体子类,java.text.SimpleDateFormat <br />3、抽象类java.util.Calendar 和它的一个具体子类,java.util.GregorianCalendar <br /><br />具体类可以被实例化, 但是抽象类却不能. 你首先必须实现抽象类的一个具体子类. <br /><br />Date 类从Java 开发包(JDK) 1.0 就开始进化, 当时它只包含了几个取得或者设置一个日期数据的各个部分的方法, 比如说月, 日, 和年. 这些方法现在遭到了批评并且已经被转移到了Calendar类里去了, 我们将在本文中进一步讨论它. 这种改进旨在更好的处理日期数据的国际化格式. 就象在JDK 1.1中一样, Date 类实际上只是一个包裹类, 它包含的是一个长整型数据, 表示的是从GMT(格林尼治标准时间)1970年, 1 月 1日00:00:00这一刻之前或者是之后经历的毫秒数. <br /><br />一、创建一个日期对象 <br /><br />让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数的简单例子. 这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间. <br />import java.util.Date; <br /><br />public class DateExample1 { <br />    public static void main(String[] args) { <br />        // Get the system date/time <br />        Date date = new Date(); <br />        System.out.println(date.getTime()); <br />    } <br />} <br /><br />在星期六, 2001年9月29日, 下午大约是6:50的样子, 上面的例子在系统输出设备上显示的结果是 1001803809710. 在这个例子中,值得注意的是我们使用了Date 构造函数创建一个日期对象, 这个构造函数没有接受任何参数. 而这个构造函数在内部使用了 System.currentTimeMillis() 方法来从系统获取日期. <br /><br />那么, 现在我们已经知道了如何获取从1970年1月1日开始经历的毫秒数了. 我们如何才能以一种用户明白的格式来显示这个日期呢? 在这里类 java.text.SimpleDateFormat 和它的抽象基类 java.text.DateFormat 就派得上用场了. <br /><br />二、日期数据的定制格式 <br /><br />假如我们希望定制日期数据的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成这个工作:<br />import java.text.SimpleDateFormat; <br />import java.util.Date; <br /><br />public class DateExample2 { <br />    public static void main(String[] args) { <br />        SimpleDateFormat bartDateFormat = <br />        new SimpleDateFormat("EEEE-MMMM-dd-yyyy"); <br />        Date date = new Date(); <br />        System.out.println(bartDateFormat.format(date)); <br />    } <br />} <br /><br />只要通过向SimpleDateFormat 的构造函数传递格式字符串"EEE-MMMM-dd-yyyy", 我们就能够指明自己想要的格式. 你应该可以看见, 格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的个数决定了日期是如何格式化的.传递"EE-MM-dd-yy"会显示 Sat-09-29-01. 请察看Sun 公司的 Web 站点获取日期格式化选项的完整的指示.<br /><br />三、将文本数据解析成日期对象 <br /><br />假设我们有一个文本字符串包含了一个格式化了的日期对象, 而我们希望解析这个字符串并从文本日期数据创建一个日期对象. 我们将再次以格式化字符串"MM-dd-yyyy" 调用SimpleDateFormat类, 但是这一次, 我们使用格式化解析而不是生成一个文本日期数据. 我们的例子, 显示在下面, 将解析文本字符串"9-29-2001"并创建一个值为001736000000 的日期对象. <br /><br />例子程序: <br />import java.text.SimpleDateFormat; <br />import java.util.Date; <br /><br />public class DateExample3 { <br />    public static void main(String[] args) { <br />        // Create a date formatter that can parse dates of <br />        // the form MM-dd-yyyy. <br />        SimpleDateFormat bartDateFormat = <br />        new SimpleDateFormat("MM-dd-yyyy"); <br />        // Create a string containing a text date to be parsed. <br />        String dateStringToParse = "9-29-2001"; <br />        try { <br />            // Parse the text version of the date. <br />            // We have to perform the parse method in a <br />            // try-catch construct in case dateStringToParse <br />            // does not contain a date in the format we are expecting. <br />            Date date = bartDateFormat.parse(dateStringToParse); <br /><br />            // Now send the parsed date as a long value <br />            // to the system output. <br />            System.out.println(date.getTime()); <br />        }catch (Exception ex) { <br />                System.out.println(ex.getMessage()); <br />        } <br />    } <br />} <br /><br />五、使用标准的日期格式化过程 <br /><br />既然我们已经可以生成和解析定制的日期格式了, 让我们来看一看如何使用内建的格式化过程. 方法 DateFormat.getDateTimeInstance() 让我们得以用几种不同的方法获得标准的日期格式化过程. 在下面的例子中, 我们获取了四个内建的日期格式化过程. 它们包括一个短的, 中等的, 长的, 和完整的日期格式. <br />import java.text.DateFormat; <br />import java.util.Date; <br /><br />public class DateExample4 { <br />    public static void main(String[] args) { <br />        Date date = new Date(); <br />        DateFormat shortDateFormat = <br />        DateFormat.getDateTimeInstance( <br />        DateFormat.SHORT, <br />        DateFormat.SHORT); <br /><br />        DateFormat mediumDateFormat = <br />        DateFormat.getDateTimeInstance( <br />        DateFormat.MEDIUM, <br />        DateFormat.MEDIUM); <br /><br />        DateFormat longDateFormat = <br />        DateFormat.getDateTimeInstance( <br />        DateFormat.LONG, <br />        DateFormat.LONG); <br /><br />        DateFormat fullDateFormat = <br />        DateFormat.getDateTimeInstance( <br />        DateFormat.FULL, <br />        DateFormat.FULL); <br />        System.out.println(shortDateFormat.format(date)); <br />        System.out.println(mediumDateFormat.format(date)); <br />        System.out.println(longDateFormat.format(date)); <br />        System.out.println(fullDateFormat.format(date)); <br />    } <br />} <br /><br />注意我们在对 getDateTimeInstance的每次调用中都传递了两个值. 第一个参数是日期风格, 而第二个参数是时间风格. 它们都是基本数据类型int(整型). 考虑到可读性, 我们使用了DateFormat 类提供的常量: SHORT, MEDIUM, LONG, 和 FULL. 要知道获取时间和日期格式化过程的更多的方法和选项, 请看Sun 公司Web 站点上的解释. <br /><br />运行我们的例子程序的时候, 它将向标准输出设备输出下面的内容: <br />9/29/01 8:44 PM <br />Sep 29, 2001 8:44:45 PM <br />September 29, 2001 8:44:45 PM EDT <br />Saturday, September 29, 2001 8:44:45 PM EDT<br /><br />六、Calendar 类 <br /><br />我们现在已经能够格式化并创建一个日期对象了, 但是我们如何才能设置和获取日期数据的特定部分呢, 比如说小时, 日, 或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类. 就如我们前面提到的那样, Calendar 类中的方法替代了Date 类中被人唾骂的方法. <br /><br />假设你想要设置, 获取, 和操纵一个日期对象的各个部分, 比方一个月的一天或者是一个星期的一天. 为了演示这个过程, 我们将使用具体的子类 java.util.GregorianCalendar. 考虑下面的例子, 它计算得到下面的第十个星期五是13号. <br />import java.util.GregorianCalendar; <br />import java.util.Date; <br />import java.text.DateFormat; <br /><br />public class DateExample5 { <br />    public static void main(String[] args) { <br />        DateFormat dateFormat = <br />        DateFormat.getDateInstance(DateFormat.FULL); <br /><br />        // Create our Gregorian Calendar. <br />        GregorianCalendar cal = new GregorianCalendar(); <br /><br />        // Set the date and time of our calendar <br />        // to the system&amp;s date and time <br />        cal.setTime(new Date()); <br /><br />        System.out.println("System Date: " + <br />        dateFormat.format(cal.getTime())); <br /><br />        // Set the day of week to FRIDAY <br />        cal.set(GregorianCalendar.DAY_OF_WEEK, <br />        GregorianCalendar.FRIDAY); <br />        System.out.println("After Setting Day of Week to Friday: " + <br />        dateFormat.format(cal.getTime())); <br /><br />        int friday13Counter = 0; <br />        while (friday13Counter &lt;= 10) { <br />            // Go to the next Friday by adding 7 days. <br />            cal.add(GregorianCalendar.DAY_OF_MONTH, 7); <br />            // If the day of month is 13 we have <br />            // another Friday the 13th. <br />            if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13) { <br />                friday13Counter++; <br />                System.out.println(dateFormat.format(cal.getTime())); <br />            } <br />        } <br />    } <br />} <br /><br />在这个例子中我们作了有趣的函数调用: <br />cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY); <br /><br />和: <br />cal.add(GregorianCalendar.DAY_OF_MONTH, 7); <br /><br />set 方法能够让我们通过简单的设置星期中的哪一天这个域来将我们的时间调整为星期五. 注意到这里我们使用了常量 DAY_OF_WEEK 和 FRIDAY来增强代码的可读性. add 方法让我们能够在日期上加上数值. 润年的所有复杂的计算都由这个方法自动处理. <br /><br />我们这个例子的输出结果是: <br />System Date: Saturday, September 29, 2001 <br />当我们将它设置成星期五以后就成了: Friday, September 28, 2001 <br />Friday, September 13, 2002 <br />Friday, December 13, 2002 <br />Friday, June 13, 2003 <br />Friday, February 13, 2004 <br />Friday, August 13, 2004 <br />Friday, May 13, 2005 <br />Friday, January 13, 2006 <br />Friday, October 13, 2006 <br />Friday, April 13, 2007 <br />Friday, July 13, 2007 <br />Friday, June 13, 2008 <br /><br /><br />七、时间掌握在你的手里 <br /><br />有了这些Date 和Calendar 类的例子, 你应该能够使用 java.util.Date, java.text.SimpleDateFormat, 和 java.util.GregorianCalendar 创建许多方法了. <br /></p>
<img src ="http://www.blogjava.net/yezhou/aggbug/55462.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yezhou/" target="_blank">叶舟</a> 2006-06-28 09:35 <a href="http://www.blogjava.net/yezhou/articles/55462.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java小记</title><link>http://www.blogjava.net/yezhou/articles/47775.html</link><dc:creator>叶舟</dc:creator><author>叶舟</author><pubDate>Wed, 24 May 2006 02:56:00 GMT</pubDate><guid>http://www.blogjava.net/yezhou/articles/47775.html</guid><wfw:comment>http://www.blogjava.net/yezhou/comments/47775.html</wfw:comment><comments>http://www.blogjava.net/yezhou/articles/47775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yezhou/comments/commentRss/47775.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yezhou/services/trackbacks/47775.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SimpleDateFormat函数使用的例子																																																																																																																																																	...&nbsp;&nbsp;<a href='http://www.blogjava.net/yezhou/articles/47775.html'>阅读全文</a><img src ="http://www.blogjava.net/yezhou/aggbug/47775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yezhou/" target="_blank">叶舟</a> 2006-05-24 10:56 <a href="http://www.blogjava.net/yezhou/articles/47775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java配置classpath</title><link>http://www.blogjava.net/yezhou/articles/47443.html</link><dc:creator>叶舟</dc:creator><author>叶舟</author><pubDate>Mon, 22 May 2006 05:03:00 GMT</pubDate><guid>http://www.blogjava.net/yezhou/articles/47443.html</guid><wfw:comment>http://www.blogjava.net/yezhou/comments/47443.html</wfw:comment><comments>http://www.blogjava.net/yezhou/articles/47443.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yezhou/comments/commentRss/47443.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yezhou/services/trackbacks/47443.html</trackback:ping><description><![CDATA[
		<div class="title">
				<h1>
						<a style="TEXT-DECORATION: none" onclick="showBody()" href="http://www.blog.163.com/article/-9fLI-ULGA5N.html#">java配置classpath</a>
				</h1>
		</div>
		<div class="info" id="articleinfo">
				<img src="http://www.blog.163.com/skin/images/icon_clock.gif" />2005-06-09 01:20:15 <img src="http://www.blog.163.com/skin/images/icon_man.gif" />hongshengyi1@-9fLI <img src="http://www.blog.163.com/skin/images/icon_house.gif" /><a href="http://www.blog.163.com/article/-9fLI-ULGA5N.html">/article/-9fLI-ULGA5N.html</a><a onclick="clipboardData.setData('Text','http://www4.blog.163.com/article/-9fLI-ULGA5N.html  java配置classpath')" href="javascript:">复制</a><a href="http://www.blog.163.com/article/-9fLI-ULGA5N.html#reply">评论</a></div>
		<div class="content imgzoom" id="articlebody">
				<span class="postbody">
						<span style="FONT-WEIGHT: bold">
								<font size="2">java配置: //windows2000 and windowsXP <br /><br />如果安装目录是D:\Program Files\jdk1.4\ <br />环境变量的设置： 我的电脑 属性-&gt;高级-&gt;环境变量-&gt; <br />系统变量-&gt;在path的变量值中加入D:\Program Files\jdk1.4\bin 即可，注意和前面的变量值用分号隔开。 <br />设置好path后，还需要设置classpath，位置同path，在classpath(没有的话新建一个)里加入 <br />.;D:\Program Files\jdk1.4\lib\dt.jar;D:\Program Files\jdk1.4\jre\lib\rt.jar <span style="COLOR: red">其中的.一定不要忘了</span><br /><br />然后在Dos命令提示符下检查一下设置的正确性 <br />运行java -version <br />如果有以下提示则说明设置是正确的（我装的是1.4.2版） <br />java version "1.4.2_01" <br />Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_01-b06) <br />Java HotSpot(TM) Client VM (build 1.4.2_01-b06, mixed mode)</font>
						</span>
				</span>
				<span class="gensmall">
						<br />
				</span>
		</div>
<img src ="http://www.blogjava.net/yezhou/aggbug/47443.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yezhou/" target="_blank">叶舟</a> 2006-05-22 13:03 <a href="http://www.blogjava.net/yezhou/articles/47443.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java api ages</title><link>http://www.blogjava.net/yezhou/articles/47052.html</link><dc:creator>叶舟</dc:creator><author>叶舟</author><pubDate>Fri, 19 May 2006 06:28:00 GMT</pubDate><guid>http://www.blogjava.net/yezhou/articles/47052.html</guid><wfw:comment>http://www.blogjava.net/yezhou/comments/47052.html</wfw:comment><comments>http://www.blogjava.net/yezhou/articles/47052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yezhou/comments/commentRss/47052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yezhou/services/trackbacks/47052.html</trackback:ping><description><![CDATA[
		<a href="http://javaalmanac.com/egs/">http://javaalmanac.com/egs/</a>
<img src ="http://www.blogjava.net/yezhou/aggbug/47052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yezhou/" target="_blank">叶舟</a> 2006-05-19 14:28 <a href="http://www.blogjava.net/yezhou/articles/47052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 中的 ClassPath 和 Package</title><link>http://www.blogjava.net/yezhou/articles/47050.html</link><dc:creator>叶舟</dc:creator><author>叶舟</author><pubDate>Fri, 19 May 2006 06:25:00 GMT</pubDate><guid>http://www.blogjava.net/yezhou/articles/47050.html</guid><wfw:comment>http://www.blogjava.net/yezhou/comments/47050.html</wfw:comment><comments>http://www.blogjava.net/yezhou/articles/47050.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yezhou/comments/commentRss/47050.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yezhou/services/trackbacks/47050.html</trackback:ping><description><![CDATA[一, 类路径 (class path)<br /><br />    当你满怀着希望安装好了 java, 然后兴冲冲地写了个 hello world,然后编译,<br />运行, 就等着那两个美好的单词出现在眼前, 可是不幸的是, 只看到了 Can&amp;#39;t find<br />class HelloWorld 或者 Exception in thread "main" java.lang.NoSuchMethodError: ma<br />in.<br />为什么呢? 编译好的 class 明明在呀.<br />    我们一起来看一看 java 程序的运行过程. 我们已经知道 java 是通过 java<br /><br /><br />虚拟机来解释运行的, 也就是通过 java 命令, javac 编译生成的 .class<br />文件就是虚拟机要执行的代码, 称之为字节码(bytecode), 虚拟机通过 classloader<br />来装载这些字节码, 也就是通常意义上的类. 这里就有一个问题, classloader 从<br />哪里知道 java 本身的类库及用户自己的类在什么地方呢? 或者有着缺省值(当前路径).<br />或者要有一个用户指定的变量来表明, 这个变量就是类路径(classpath), 或者在运行<br />的时候传参数给虚拟机. 这也就是指明 classpath 的三个方法. 编译的过程和运行<br />的过程大同小异, 只是一个是找出来编译, 另一个是找出来装载.<br />    实际上 java 虚拟机是由 java luncher 初始化的, 也就是 java (或 java.exe)<br />这个程序来做的. 虚拟机按以下顺序搜索并装载所有需要的类:<br />    1, 引导类: 组成 java 平台的类, 包含 rt.jar 和 i18n.jar 中的类.<br />    2, 扩展类: 使用 java 扩展机制的类, 都是位于扩展目录($JAVA_HOME/jre/lib/ext)<br />中的 .jar 档案包.<br />    3, 用户类: 开发者定义的类或者没有使用 java 扩展机制的第三方产品. 你必须在<br />命令行中使用 -classpath 选项或者使用 CLASSPATH 环境变量来确定这些类的位置. 我<br />们在上面所说的用户自己的类就是特指这些类.<br />    这样, 一般来说, 用户只需指定用户类的位置, 引导类和扩展类是"自动"寻找的.<br />    那么到底该怎么做呢? 用户类路径就是一些包含类文件的目录, .jar, .zip 文件的<br />列表, 至于类具体怎么找, 因为牵扯到 package 的问题, 下面将会说到, 暂时可认为<br />只要包含了这个类就算找到了这个类. 根据平台的不同分隔符略有不同, 类 unix 的系<br />统基本上都是 ":", windows 多是 ";". 其可能的来源是:<br /><br />    * ".", 即当前目录, 这个是缺省值.<br /><br /><br />    * CLASSPATH 环境变量, 一旦设置, 将缺省值覆盖.<br />    * 命令行参数 -cp 或者 -classpath, 一旦指定, 将上两者覆盖.<br />    * 由 -jar 参数指定的 .jar 档案包, 就把所有其他的值覆盖, 所有的类都来自这个指<br />定的档案包中. 由于生成可执行的 .jar 文件, 还需要其他一些知识, 比如 package, 还有<br />特定的配置文件, 本文的最后会提到. 可先看看 jdk 自带的一些例子.<br /><br />    我们举个 HelloWorld 的例子来说明. 先做以下假设:<br />    * 当前目录是 /HelloWorld (或 c:\HelloWorld, 以后都使用前一个)<br />    * jdk 版本为 1.2.2 (linux 下的)<br />    * PATH 环境变量设置正确. (这样可以在任何目录下都可以使用工具)<br />    * 文件是 HelloWorld.java, 内容是:<br /><br />    public class HelloWorld<br />    {<br />        public static void main(String[] args)<br />        {<br />            System.out.println("Hello World!\n");<br />            System.exit(0);<br />        }<br />    }<br /><br />    首先这个文件一定要写对, 如果对 c 熟悉的话, 很有可能写成这样:<br /><br /><br /><br />    public static void main(int argc, String[] argv)<br />    {<br />        ....<br />    }<br /><br />    这样是不对的, 不信可以试一试. 由于手头没有 java 的规范, 所以<br />作如下猜想: java 的 application 程序, 必须以 public static void main(String[])<br />开始, 其他不一样的都不行.<br /><br />    到现在为止, 我们设置方面只设置了 PATH.<br /><br />    1, 当前路径就是指你的 .class 文件在当前目录下,<br /><br />       [HelloWorld]$ javac HelloWorld.java  //这一步不会有多大问题,<br />       [HelloWorld]$ java HelloWorld        // 这一步可能就会有问题.<br /><br />    如果出了象开头那样的问题, 首先确定不是由于敲错命令而出错. 如果没有敲错命令,<br />那么接着做:<br /><br />       [HelloWorld]$ echo $CLASSPATH<br />       或者<br /><br /><br />       c:\HelloWorld&gt;echo %CLASSPATH%<br /><br />    看看 CLASSPATH 环境变量是否设置了, 如果设置了, 那么用以下命令:<br /><br />       [HelloWorld]$ CLASSPATH=<br />       或者<br />       c:\HelloWorld&gt; set CLASSPATH=<br /><br />    来使它为空, 然后重新运行. 这次用户类路径缺省的是 ".", 所以应该不会有相<br />同的问题了. 还有一个方法就是把 "." 加入到 CLASSPATH 中.<br /><br />       [/]$ CLASSPATH=$CLASSPATH:.<br />       或者<br />       c:\HelloWorld&gt; set CLASSPATH=%CLASSPATH%;.<br /><br />    同样也可以成功. Good Luck.<br /><br />    2, 当你的程序需要第三方的类库支持, 而且比较常用, 就可以采用此种方法.比如常<br />用的数据库驱动程序, 写 servlet 需要的 servlet 包等等. 设置方法就是在环境变量中<br />加入 CLASSPATH. 然后就可以直接编译运行了. 还是以 HelloWorld 为例, 比如你想在根<br />目录中运行它, 那么你直接在根目录下执行<br /><br /><br /><br />      $ java HelloWorld<br />      或者<br />      c:\&gt;java HelloWorld<br /><br />    这样肯定会出错, 如果你的 CLASSPATH 没有改动的话. 我想大家应该知道为什么错了<br />吧, 那么怎么改呢? 前面说过, 用户类路径就是一些包含你所需要的类的目录, .jar 档案<br />包, .zip 包. 现在没有生成包, 所以只好把 HelloWorld.class 所在的目录加到 CLASSPAT<br />H<br />了, 根据前面的做法, 再运行一次, 看看, 呵呵, 成功了, 换个路径, 又成功了!! 不仅仅<br />可<br />以直接运行其中的类, 当你要 import 其中的某些类时, 同样处理.<br />    不知道你想到没有, 随着你的系统的不断的扩充, (当然了, 都是一些需要 java 的东<br />西)<br />如果都加到这个环境变量里, 那这个变量会越来越臃肿, 虽然环境变量空间可以开很大, 总<br />觉得有些不舒服. 看看下面一个方法.<br /><br />    3, 在命令行参数中指明 classpath.<br /><br />    还是和上面相同的目标, 在任何目录下执行 HelloWorld, 用这个方法怎么实现呢?<br /><br />      [/]$ java -cp /HelloWorld HelloWorld<br />      或者<br /><br /><br />      c:\&gt;java -cp c:\HelloWorld HelloWorld<br /><br />    就可以了. 这是这种方法的最简单的应用了. 当你使用了另外的包的时候, 还可以采用<br />这<br />种方法. 例如:<br /><br />      $ javac -classpath aPath/aPackage.jar:. myJava.java<br />      $ java  -cp aPath/aPackage.jar:. myJava<br />      或者<br />      c:\&gt; javac -classpath aPath\aPackage.jar;. myJava.java<br />      c:\&gt; java  -cp aPath\aPackage.jar;. myJava<br /><br />    这种方法也有一个不方便的的地方就是当第三方包所在的路径较长或者需要两个以上包<br />的<br />时候, 每次编译运行都要写很长, 非常不方便, 这时候可以写脚本来解决. 比如一个例子:<br /><br />      compile   (文件, 权限改为可执行, 当前目录)<br /><br />      $ cat compile<br />---------------------------<br />      #!/bin/bash<br /><br /><br /><br />      javac -classpath aPath\aPackage.jar:anotherPath\anotherPackage.jar:. myJav<br />a.java<br />---------------------------<br /><br />      run (文件, 权限改为可执行, 当前目录)<br /><br />      $cat run<br />---------------------------<br />      #!/bin/bash<br /><br />      java -cp aPath\aPackage.jar:anotherPath\anotherPackage.jar:. myJava<br />---------------------------<br /><br />      或者:<br /><br />      compile.bat<br /><br />      c:\HelloWorld&gt; type compile.bat<br />-------------------------<br />      javac -classpath aPath\aPackage.jar:anotherPath\anotherPackage.jar:. myJav<br />a.java<br />-------------------------<br /><br /><br /><br />      run.bat<br /><br />      c:\HelloWorld&gt; type run.bat<br />------------------------<br />      java -cp aPath\aPackage.jar:anotherPath\anotherPackage.jar:. myJava<br />------------------------<br />    就可以了. 试试看.<br />    前面提到了扩展类, 扩展类是什么呢? java 的扩展类就是应用程序开发者用来<br />扩展核心平台功能的 java 类的包(或者是 native code). 虚拟机能像使用系统类一<br />样使用这些扩展类. 有人建议可以把包放入扩展目录里, 这样, CLASSPATH 也不用设了,<br />也不用指定了, 岂不是很方便? 确实可以正确运行, 但是个人认为这样不好, 不能什么<br />东西都往里搁, 一些标准的扩展包可以, 比如, JavaServlet, Java3D 等等. 可以提个<br />建议, 加一个环境变量, 比如叫 JARPATH, 指定一个目录, 专门存放用户的 jar zip<br />等包, 这个要等 SUN 公司来做了.<br /><br /><br />    windows98 下, 我原来安装的时候, 一直装不上, 总是死机, 好不容易装上了, 缺<br />省的是不能运行正确的, 然后把 tool.jar 放入 CLASSPATH 后工作正常. 现在作测试,<br />去掉仍然是正确的. 经过多次测试, 发现如果原来曾装过 jdk 的都很好, 没有装过的<br />装的时候会死机, 多装几次就可以了. 如果你发现正确安装后, 不能正常工作, 就把<br />tools.jar 加入 CLASSPATH, 试一下.<br /><br /><br /><br /><br />二, 包 (package)<br /><br />    Java 中的 "包" 是一个比较重要的概念, package 是这样定义的:<br /><br />Definition: A package is a collection of related classes and interfaces<br />that provides access protection and namespace management.<br /><br />    也就是: 一个包就是一些提供访问保护和命名空间管理的相关类与接口的集合.<br />    使用包的目的就是使类容易查找使用, 防止命名冲突, 以及控制访问.<br />    这里我们不讨论关于包的过多的东西, 只讨论和编译, 运行, 类路径相关的东西.<br />至于包的其他内容, 请自己查阅相关文档.<br /><br />    简单一点来说, 包就是一个目录, 下面的子包就是子目录, 这个包里的类就是<br />这个目录下的文件. 我们用一个例子来说明.<br />    首先建目录结构如下: PackageTest/source/, 以后根目录指的是 PackageTest<br />目录, 我们的源程序放在 source 目录下. 源程序如下:<br /><br />PackageTest.java<br /><br />package pktest;<br /><br /><br /><br />import pktest.subpk.*;<br /><br />public class PackageTest<br />{<br />    private String value;<br /><br />    public PackageTest(String s)<br />    {<br />        value = s;<br />    }<br /><br />    public void printValue()<br />    {<br />        System.out.println("Value of PackageTest is " + value);<br />    }<br /><br />    public static void main(String[] args)<br />    {<br />        PackageTest test = new PackageTest("This is a Test Package");<br />        test.printValue();<br />        PackageSecond second = new PackageSecond("I am in PackageTest");<br /><br /><br />        second.printValue();<br />        PackageSub sub = new PackageSub("I am in PackageTest");<br />        sub.printValue();<br />        System.exit(0);<br />    }<br />}<br /><br />PackageSecond.java<br /><br />package pktest;<br /><br />public class PackageSecond<br />{<br />    private String value;<br /><br />    public PackageSecond(String s)<br />    {<br />        value = s;<br />    }<br /><br />    public void printValue()<br />    {<br /><br /><br />        System.out.println("Value of PackageSecond is " + value);<br />    }<br />}<br /><br />PackageSub.java<br /><br />package pktest.subpk;<br /><br />import pktest.*;<br /><br />public class PackageSub<br />{<br />    private String value;<br /><br />    public PackageSub(String s)<br />    {<br />        value = s;<br />    }<br /><br />    public void printValue()<br />    {<br />        PackageSecond second = new PackageSecond("I am in subpackage.");<br /><br /><br />        second.printValue();<br />        System.out.println("Value of PackageSub is " + value);<br />    }<br /><br />}<br /><br />Main.java<br /><br />import pktest.*;<br />import pktest.subpk.*;<br /><br />public class Main()<br />{<br />    public static void main()<br />    {<br />        PackageSecond second = new PackageSecond("I am in Main");<br />        second.printValue();<br />        PackageSub sub = new PackageSub("I am in Main");<br />        sub.printValue();<br />        System.exit(0);<br />    }<br />}<br /><br /><br /><br />    其中, Main.java 是包之外的一个程序, 用来测试包外的程序访问包内的类,<br />PackageTest.java 属于 pktest 这个包, 也是主程序. PackageSecond.java 也<br />属于 pktest, PackageSub 属于 pktest 下的 subpk 包, 也就是 pktest.subpk.<br />详细使用情况, 请参看源程序.<br />    好了, 先把源程序都放在 source 目录下, 使 source 成为当前目录, 然后编<br />译一下, 呵呵, 出错了,<br /><br />Main.java:1: Package pktest not found in import.<br />import pktest.*;<br /><br />    这里涉及到类路径中包是怎么查找的, 前面我们做了一点假设: "只要包含了<br />这个类就算找到了这个类", 现在就有问题了. 其实 jdk 的 工具 javac java<br />javadoc 都需要查找类, 看见目录, 就认为是包的名字, 对于 import 语句来说,<br />一个包对应一个目录. 这个例子中, import pktest.*, 我们知道类路径可以包<br />含一个目录, 那么就以那个目录为根, 比如有个目录 /myclass, 那么就会在查找<br />/myclass/pktest 目录及其下的类. 所有的都找遍, 如果没有就会报错. 由于现在<br />的类路径只有当前目录, 而当前目录下没有 pktest 目录, 所以就会出错. 类路径<br />还可以包含 .jar .zip 文件, 这些就是可以带目录的压缩包, 可以把 .jar .zip<br />文件看做一个虚拟的目录, 然后就和目录一样对待了.<br />    好了, 应该知道怎么做了吧, 修改后的目录结构如下:<br /><br /><br /><br />    PackageTest<br />    |<br />    |__source   Main.java<br />       |<br />       |__pktest   PackageTest.java   PackageSecond.java<br />          |<br />          |__subpk  PackageSub.java<br /><br />    然后重新编译, 运行, 哈哈, 通过了. 我们再来运行一下 PackageTest.<br /><br />    [source]$ java pktest/PackageTest<br /><br />    怎么又出错了?<br /><br />Exception in thread "main" java.lang.NoClassDefFoundError: pktest/PackageTest<br /><br />    是这样的, java 所要运行的是一个类的名字, 它可不管你的类在什么地方, 就象<br />我们前面所讨论的一样来查找这个类, 所以它把 pktest/PackageTest 看成是一个类的<br />名字了, 当然会出错了, 应该这么做,<br /><br />    [source]$ java pktest.PackageTest<br /><br /><br /><br />    大家应该明白道理吧, 我就不多说了. 注意 javac 不一样, 是可以指明源文件路径<br />的, javac 只编译, 不运行, 查找类也只有在源文件中碰到 import 时才会做, 与源文件<br />所在的包没有关系.<br />    似乎还又些不好的地方, 怎么生成的 .class 文件这么分散呀, 看着真别扭. 别急,<br />javac 有一个 -d 命令行参数, 可以指定一个目录, 把生成的 .class 文件按照包给你<br />好好地搁在这个目录里面.<br /><br />    [source]$ mkdir classes<br />    [source]$ javac -d classes pktest/PackageTest.java<br />    [source]$ javac -d classes Main.java<br /><br />    那么运行怎么运行呢?<br /><br />    [source]$ cd classes<br />    [classes]$ java pktest.PackageTest<br />    [classes]$ java Main<br /><br />    就可以了. 其实 jdk 的这一套工具小巧简单, 功能强大, 不会用或者用错其<br />实不关工具的事, 关键是明白工具背后的一些原理和必要的知识. 集成环境是很好,<br />但是它屏蔽了很多底层的知识, 不出错还好, 一旦出错, 如果没有这些必要的知识<br />就很难办, 只好上 bbs 问, 别人只告诉了你解决的具体方法, 下一次遇到稍微变化<br />一点的问题又不懂了. 所以不要拘泥于工具, java 的这一套工具组合起来使用, 中<br /><br /><br />小型工程(五六十个类), 还是应付得下来的.<br /><br /><br />三, jar 文件<br /><br />    以下把 .jar .zip 都看做是 .jar 文件.<br /><br /><br />1,  从前面我们可以看出来 jar 文件在 java 中非常重要, 极大地方便了用户的<br />使用. 我们也可以做自己的 .jar 包.<br />    还是使用前面那个例子, Main.java 是包之外的东西, 用了 pktest 包中的类,<br />我们现在就是要把 pktest 做成一个 .jar 包, 很简单, 刚才我们已经把 pktest<br />中的 .class 都集中起来了,<br /><br />    [classes]$ jar -cvf mypackage.jar pktest<br /><br />    就会生成 mypackage.jar 文件, 测试一下, 刚才我们生成的 Main.class 就在<br />    classes 目录下, 所以, 从前面可以知道:<br /><br />    [classes]$ java -cp mypackage.jar:. Main<br /><br />    就可以运行了.<br /><br /><br /><br />2,  如果你看过 jdk 所带的例子, 你就会知道, .jar 还可以直接运行,<br /><br />    [/demo]$ java -jar aJar.jar<br /><br />    那好, 就那我们的试一试,<br /><br />    [classes]$ java -jar mypackage.jar<br />    Failed to load Main-Class manifest attribute from<br />    mypackage.jar<br /><br />    看来我们的 jar 和它的 jar 还不一样, 有什么不一样呢? 拿它一个例子出来,<br />重新编译, 生成 .jar 文件, 比较后发现, 是 .jar 压缩包中 META-INF/MANIFEST.MF<br />文件不一样, 多了一行, Main-Class: xxxxx, 再看看出错信息, 原来是没有指定<br />Main-Class, 看看 jar 命令, 发现有一个参数 -m,<br /><br />    -m  include manifest information from specified manifest file<br /><br />    和出错信息有点关系, 看来它要读一个配制文件. 只好照猫画虎写一个了.<br /><br />    [classes]$ cat myManifest<br />    Manifest-Version: 1.0<br /><br /><br />    Main-Class: pktest.PackageTest<br />    Created-By: 1.2.2 (Sun Microsystems Inc.)<br /><br />    [classes]$ jar cvfm mypackage.jar myManifest pktest<br />    added manifest<br />    adding: pktest/(in = 0) (out= 0)(stored 0%)<br />    adding: pktest/PackageSecond.class(in = 659) (out= 395)(deflated 40%)<br />    adding: pktest/subpk/(in = 0) (out= 0)(stored 0%)<br />    adding: pktest/subpk/PackageSub.class(in = 744) (out= 454)(deflated 38%)<br />    adding: pktest/PackageTest.class(in = 1041) (out= 602)(deflated 42%)<br /><br />    [classes]$ java -jar mypackage.jar<br />    Value of PackageTest is This is a Test Package<br />    Value of PackageSecond is I am in PackageTest<br />    Value of PackageSecond is I am in subpackage.<br />    Value of PackageSub is I am in PackageTest<br /><br />    好了, 成功了, 这样就做好了一个可以直接执行的 .jar 文件. 大家可以自己试一试<br />做一个以 Main 为主程序的可执行的 jar.<br /><br /><br />小结:<br /><br /><br /><br />    这篇文章中, 我们讨论了 java 中的 class path, package, jar 等基本但比较<br />重要的东西, 主要是 class path. 并不是简单的一份 CLASSPATH 的完全功略, 而是<br />试图让读者明白其原理, 自己思考, 自己动手. 其实大多数东西都在 sun 的 java doc<br />中都有, 我只不过结合例子稍微谈了一下, 希望能有所帮助. 由于条件所限, 只测试了<br />jdk1.2.2 在 98 及 linux 的情况, 其他版本的 jdk 和平台请大家自己测试, 错误在<br />所难免, 还请指正.<br /><br />    下面是一些需要注意的问题:<br /><br />1, 如果类路径中需要用到 .jar 文件, 必须把 jar 文件的文件名放入类路径, 而不是<br />其所在的目录.<br />2, 在任何时候, 类名必须带有完全的包名,<br />3, "." 当前目录最好在你的类路径中.<br /><br />    下面是一些常见的编译和运行的模式.<br /><br />4. To compile HelloWorld.java app in the default package in C:\MyDir, use<br />        CD \MyDir<br />            C:\jdk1.3\bin\Javac.exe -classpath . HelloWorld.java<br />5. To run a HelloWorld.class app, in the default package in C:\MyDir, use<br />        CD \MyDir<br /><br /><br />            C:\jdk1.3\bin\Java.exe -classpath . HelloWorld<br />6. To run a HelloWorld.class app, in the default package in a jar in C:\MyDir, u<br />se<br />        CD \MyDir<br />            C:\jdk1.3\bin\Java.exe -classpath HelloWorld.jar HelloWorld<br />7. To compile a HelloWorld.java app in C:\MyPackage, in package MyPackage, use<br />        CD \<br />            C:\jdk1.3\bin\Javac.exe -classpath . MyPackage\HelloWorld.java<br />8. To run a HelloWorld.class app in C:\MyPackage, in package MyPackage, use<br />        CD \<br />            C:\jdk1.3\bin\Java.exe -classpath . MyPackage.HelloWorld<br />9. To run a HelloWorld.class app in C:\MyPackage, in a jar in package MyPackage,<br />use<br />        CD \MyDir<br />            C:\jdk1.3\bin\Java.exe -classpath HelloWorld.jar MyPackage.HelloWorl<br />d<br /><br />(注: default package 指的是在程序中不指定任何包).<br /><br />    最后一个小小的建议, 把 sun 的 jdk tools documentation 好好地看一看,<br />把 jdk 的那些工具 java javac javadoc jar javap jdb......好好用一用, 会<br />有好处的. The Simplest Is The Best.<br /><img src ="http://www.blogjava.net/yezhou/aggbug/47050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yezhou/" target="_blank">叶舟</a> 2006-05-19 14:25 <a href="http://www.blogjava.net/yezhou/articles/47050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在上例的基础上修改程序，通过xml配置文件得到数据库信息</title><link>http://www.blogjava.net/yezhou/articles/42665.html</link><dc:creator>叶舟</dc:creator><author>叶舟</author><pubDate>Sun, 23 Apr 2006 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/yezhou/articles/42665.html</guid><wfw:comment>http://www.blogjava.net/yezhou/comments/42665.html</wfw:comment><comments>http://www.blogjava.net/yezhou/articles/42665.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yezhou/comments/commentRss/42665.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yezhou/services/trackbacks/42665.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 更新程序：-----------------------------------------------------------------------------------------------------------当前目录下新建config.xml文件：文件内容：&lt;Config&gt;        &lt;DBConfig&gt;                &lt;drive...&nbsp;&nbsp;<a href='http://www.blogjava.net/yezhou/articles/42665.html'>阅读全文</a><img src ="http://www.blogjava.net/yezhou/aggbug/42665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yezhou/" target="_blank">叶舟</a> 2006-04-23 15:33 <a href="http://www.blogjava.net/yezhou/articles/42665.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将上例中的txt文档全部替换成csv文档（表格文档）</title><link>http://www.blogjava.net/yezhou/articles/42663.html</link><dc:creator>叶舟</dc:creator><author>叶舟</author><pubDate>Sun, 23 Apr 2006 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/yezhou/articles/42663.html</guid><wfw:comment>http://www.blogjava.net/yezhou/comments/42663.html</wfw:comment><comments>http://www.blogjava.net/yezhou/articles/42663.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yezhou/comments/commentRss/42663.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yezhou/services/trackbacks/42663.html</trackback:ping><description><![CDATA[package ConnectionTest;<br /><br />import java.io.BufferedWriter;<br />import java.io.File;<br />import java.io.FileOutputStream;<br />import java.io.FileWriter;<br />import java.io.IOException;<br />import java.io.OutputStreamWriter;<br />import java.sql.Connection;<br />import java.sql.DriverManager;<br />import java.sql.PreparedStatement;<br />import java.sql.ResultSet;<br />import java.sql.ResultSetMetaData;<br />import java.sql.SQLException;<br />import java.sql.Statement;<br />import java.util.ArrayList;<br />import java.util.Collection;<br />import java.util.Iterator;<br /><br />public class ContactTest {        <br />        private Connection conn = null;<br />        private int flag;<br />        <br />        static final String LINE_SEPARATOR = System.getProperty("line.separator");<br />        <br />        public void getConnection(){<br />                try{<br />                        String JDBC_URL = "jdbc:pointbase:server://localhost:9092/test";<br />                        String JDBC_DRIVER="com.pointbase.jdbc.jdbcUniversalDriver";                                        <br />                        String USER = "PBPUBLIC";<br />                        String PASSWORD = "PBPUBLIC";<br />                <br />                        Class.forName(JDBC_DRIVER).newInstance();<br />                        conn = DriverManager.getConnection(JDBC_URL,USER,PASSWORD);<br />                        System.out.println("connection success");<br />                }catch(Exception e){<br />                        e.printStackTrace();<br />                }<br />        }<br />        <br />        public void closeConnection() throws SQLException{<br />                if(this.conn != null){<br />                        conn.close();<br />                }<br />        }<br />        <br />        public void getResult(int flag,Collection col) throws IOException{<br />                String name = null;<br />                if(flag == 0){<br />                        System.out.println("输出查询信息");<br />                        name = "select.csv";<br />                        WriterOut(name,col);<br />                }else if(flag == 1){<br />                        System.out.println("输出插入信息");<br />                        name = "insert.csv";<br />                        WriterOut(name,col);<br />                }else if(flag == 2){<br />                        System.out.println("输出修改信息");<br />                        name = "update.csv";<br />                        WriterOut(name,col);<br />                }else if(flag == 3){<br />                        System.out.println("输出删除信息");<br />                        name = "delete.csv";<br />                        WriterOut(name,col);<br />                }else{<br />                        System.out.println("标志码输入错误");<br />                }<br />        }<br />        <br />        public void WriterOut(String name,Collection list) throws IOException{<br />                String path = "d:/"+name;<br />        <br />        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path)));<br />        int count = list.size();<br />        String csvData[] = new String[count];<br />        <br />        Iterator it = list.iterator();<br />        <br />        int i = 0;<br />        while(it.hasNext()){<br />                String temp = (String)it.next();<br />                System.out.println(temp);<br />                csvData[i] = temp;<br />                i++;<br />        }<br />        <br />        for(int j = 0;j &lt; csvData.length;j++)<br />                {<br />                        writer.write(csvData[j] + LINE_SEPARATOR);<br />                        <br />                }<br />        writer.close();<br />       <br />        }<br />        <br />        public void SelectDB(){<br />                try{<br />                        getConnection();<br />                        Statement stmt  = this.conn.createStatement();<br />                        String SQL = "select id ,name ,age ,address  from test";<br />                        ResultSet rs = stmt.executeQuery(SQL);<br /><br />                        Collection col = new ArrayList();<br />                        <br />                        ResultSetMetaData ss = rs.getMetaData();        <br />                        int count = ss.getColumnCount();<br /><br />                        String temp = "";<br />                        for(int j = 1; j &lt;= count; j++){<br />                                System.out.print(ss.getColumnName(j)+"        ");<br />                                if(j == count){<br />                                        temp = temp + ss.getColumnName(j);<br />                                }else{<br />                                        temp = temp + ss.getColumnName(j)+",";<br />                                }<br />                        }<br />                        col.add(temp);<br />         <br />                        System.out.println(" ");<br />                        <br />                        while(rs.next()){        <br />                                temp = "";<br />                                for (int i = 1; i &lt;= count;i++){<br />                                        System.out.print(rs.getString(i)+" ");<br />                                        if(i == count){<br />                                                temp = temp + "\""+ rs.getString(i) + "\"";<br />                                        }else{<br />                                                temp = temp + "\""+ rs.getString(i) + "\",";<br />                                        }        <br />                                }<br />                                col.add(temp);   //<br />                                System.out.println(" ");<br />                        }<br />                        getResult(0,col);<br />                        closeConnection();<br />                }catch(Exception e){<br />                        e.printStackTrace();<br />                }<br />        }<br />        <br />        public void InsertDB(){<br />                try{<br />                        getConnection();<br />                        String SQL = "insert into test values('0011','sandy','25','shanghai')";<br />                        PreparedStatement pstmt  = this.conn.prepareStatement(SQL);<br />                        <br />                        ResultSet rs = pstmt.executeQuery();<br />                        conn.commit();<br />                        <br />                        SQL = "select id ,name ,age ,address  from test";<br />                        Statement stmt = this.conn.createStatement();<br />                        rs = stmt.executeQuery(SQL);<br />                        ResultSetMetaData ss = rs.getMetaData();        <br />                        int count = ss.getColumnCount();<br /><br />                        Collection col = new ArrayList();<br />                        <br />            String temp = "";<br />                        for(int j = 1; j &lt;= count; j++){<br />                                System.out.print(ss.getColumnName(j)+"        ");<br />                                if(j == count){<br />                                        temp = temp + ss.getColumnName(j);<br />                                }else{<br />                                        temp = temp + ss.getColumnName(j)+",";<br />                                }<br />                        }<br />                        col.add(temp);<br />                        System.out.println(" ");<br />            <br />                        while(rs.next()){        <br />                                temp = "";<br />                                for (int i = 1; i &lt;= count;i++){<br />                                        System.out.print(rs.getString(i)+" ");<br />                                        if(i == count){<br />                                                temp = temp + "\""+ rs.getString(i) + "\"";<br />                                        }else{<br />                                                temp = temp + "\""+ rs.getString(i) + "\",";<br />                                        }<br />                                }<br />                                col.add(temp);<br />                                System.out.println(" ");<br />                        }<br />                        getResult(1,col);<br />                        closeConnection();<br />                }catch(Exception e){<br />                        e.printStackTrace();<br />                }<br />        }<br />        <br />        public void UpdateDB(){<br />                try{<br />                        getConnection();<br />                        String SQL = "update test set address = '上海'";<br />                        PreparedStatement pstmt  = this.conn.prepareStatement(SQL);<br />                        <br />                        ResultSet rs = pstmt.executeQuery();<br />                        conn.commit();<br />                        <br />                        SQL = "select id ,name ,age ,address  from test";<br />                        Statement stmt = this.conn.createStatement();<br />                        rs = stmt.executeQuery(SQL);<br />                        ResultSetMetaData ss = rs.getMetaData();        <br />                        int count = ss.getColumnCount();<br />                        <br />                        Collection col = new ArrayList();<br />                        <br />            String temp = "";<br />                        <br />                        for(int j = 1; j &lt;= count; j++){<br />                                System.out.print(ss.getColumnName(j)+"        ");<br />                                if(j == count){<br />                                        temp = temp + ss.getColumnName(j);<br />                                }else{<br />                                        temp = temp + ss.getColumnName(j)+",";<br />                                }<br />                        }<br />                        col.add(temp);<br /><br />                        System.out.println(" ");<br />                        <br />                        while(rs.next()){        <br />                                temp = "";<br />                                for (int i = 1; i &lt;= count;i++){<br />                                        System.out.print(rs.getString(i)+" ");<br />                                        if(i == count){<br />                                                temp = temp + "\""+ rs.getString(i) + "\"";<br />                                        }else{<br />                                                temp = temp + "\""+ rs.getString(i) + "\",";<br />                                        }<br />                                }<br />                                col.add(temp);<br />                                System.out.println(" ");<br />                        }<br />                        getResult(2,col);<br />                        closeConnection();<br />                }catch(Exception e){<br />                        e.printStackTrace();<br />                }<br />                <br />        }<br />        <br />        public void DeleteDB(){<br />                try{<br />                        getConnection();<br />                        String SQL = "delete from test where id = '0008'";<br />                        PreparedStatement pstmt  = this.conn.prepareStatement(SQL);<br />                        <br />                        ResultSet rs = pstmt.executeQuery();        <br />                        conn.commit();<br />                        <br />                        SQL = "select id ,name ,age ,address  from test";<br />                        Statement stmt = this.conn.createStatement();<br />                        rs = stmt.executeQuery(SQL);<br />                        ResultSetMetaData ss = rs.getMetaData();        <br />                        int count = ss.getColumnCount();<br />                        <br />                        Collection col = new ArrayList();<br />                        <br />            String temp = "";<br />                        <br />                        for(int j = 1; j &lt;= count; j++){<br />                                System.out.print(ss.getColumnName(j)+"        ");<br />                                if(j == count){<br />                                        temp = temp + ss.getColumnName(j);<br />                                }else{<br />                                        temp = temp + ss.getColumnName(j)+",";<br />                                }<br />                        }<br />                        col.add(temp);<br />                        System.out.println(" ");<br />                        <br />                        while(rs.next()){        <br />                                temp = "";<br />                                for (int i = 1; i &lt;= count;i++){<br />                                        System.out.print(rs.getString(i)+" ");<br />                                        if(i == count){<br />                                                temp = temp + "\""+ rs.getString(i) + "\"";<br />                                        }else{<br />                                                temp = temp + "\""+ rs.getString(i) + "\",";<br />                                        }<br />                                }<br />                                col.add(temp);<br />                                System.out.println(" ");<br />                        }<br />                        getResult(3,col);<br />                        closeConnection();<br />                }catch(Exception e){<br />                        e.printStackTrace();<br />                }<br />                <br />        }<br />        <br />        public void excute(int tag){<br />                if(tag == 0){<br />                        System.out.println("进行查询操作");<br />                        SelectDB();<br />                }else if(tag == 1){<br />                        System.out.println("进行添加操作");<br />                        InsertDB();<br />                }else if(tag == 2){<br />                        System.out.println("进行修改操作");<br />                        UpdateDB();<br />                }else if(tag == 3){<br />                        System.out.println("进行删除操作");<br />                        DeleteDB();<br />                }else{<br />                        System.out.println("标志码输入错误");<br />                }<br />        }<br />        <br />        public static void main(String[] args) <br />        {<br />                ContactTest  ct = new ContactTest ();<br />                ct.flag = 3;  //0-查询;1-添加;2-修改;3-删除<br />                ct.excute(ct.flag);<br />        }<br />        <br />}<br /><img src ="http://www.blogjava.net/yezhou/aggbug/42663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yezhou/" target="_blank">叶舟</a> 2006-04-23 15:32 <a href="http://www.blogjava.net/yezhou/articles/42663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在上例的基础上对程序进行了修改，通过从配置文件中读取数据库信息</title><link>http://www.blogjava.net/yezhou/articles/42664.html</link><dc:creator>叶舟</dc:creator><author>叶舟</author><pubDate>Sun, 23 Apr 2006 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/yezhou/articles/42664.html</guid><wfw:comment>http://www.blogjava.net/yezhou/comments/42664.html</wfw:comment><comments>http://www.blogjava.net/yezhou/articles/42664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yezhou/comments/commentRss/42664.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yezhou/services/trackbacks/42664.html</trackback:ping><description><![CDATA[在目录下增加config.properties文件，内容为：<br /><br />db_driver = com.pointbase.jdbc.jdbcUniversalDriver<br />db_url = jdbc:pointbase:server://localhost:9092/test<br />db_user = PBPUBLIC<br />db_password = PBPUBLIC<br /><br />格式一定要按照 key = value 的写法<br /><br />-----------------------------------------------------------------------------------------------------------<br />主程序：<br /><br />package ConnectionTest;<br /><br />import java.io.BufferedWriter;<br />import java.io.File;<br />import java.io.FileInputStream;<br />import java.io.FileOutputStream;<br />import java.io.IOException;<br />import java.io.OutputStreamWriter;<br />import java.sql.Connection;<br />import java.sql.DriverManager;<br />import java.sql.PreparedStatement;<br />import java.sql.ResultSet;<br />import java.sql.ResultSetMetaData;<br />import java.sql.SQLException;<br />import java.sql.Statement;<br />import java.util.ArrayList;<br />import java.util.Collection;<br />import java.util.Iterator;<br />import java.util.Properties;<br /><br />public class ContactTest {        <br />        private Connection conn = null;<br />        private int flag;<br />        <br />        static final String LINE_SEPARATOR = System.getProperty("line.separator");<br />        <br />        public void getConnection(){<br />                try{<br />                        /*<br />                         * 修改了程序，通过从配置文件中取得数据库信息<br />                         */<br />                         File file = new File("./src/test/ConnectionTest/config.properties");  //确定你的目录路径<br />                 Properties props = new Properties();<br /><br />                 props.load(new FileInputStream(file));<br />                        <br />                        <br />                        String JDBC_URL = props.getProperty("db_url");<br />                        String JDBC_DRIVER= props.getProperty("db_driver");;                                        <br />                        String USER = props.getProperty("db_user");;<br />                        String PASSWORD = props.getProperty("db_password");;<br />                <br />                        Class.forName(JDBC_DRIVER).newInstance();<br />                        conn = DriverManager.getConnection(JDBC_URL,USER,PASSWORD);<br />                        System.out.println("connection success");<br />                }catch(Exception e){<br />                        e.printStackTrace();<br />                }<br />        }<br />        <br />        public void closeConnection() throws SQLException{<br />                if(this.conn != null){<br />                        conn.close();<br />                }<br />        }<br />        <br />        public void getResult(int flag,Collection col) throws IOException{<br />                String name = null;<br />                if(flag == 0){<br />                        System.out.println("输出查询信息");<br />                        name = "select.csv";<br />                        WriterOut(name,col);<br />                }else if(flag == 1){<br />                        System.out.println("输出插入信息");<br />                        name = "insert.csv";<br />                        WriterOut(name,col);<br />                }else if(flag == 2){<br />                        System.out.println("输出修改信息");<br />                        name = "update.csv";<br />                        WriterOut(name,col);<br />                }else if(flag == 3){<br />                        System.out.println("输出删除信息");<br />                        name = "delete.csv";<br />                        WriterOut(name,col);<br />                }else{<br />                        System.out.println("标志码输入错误");<br />                }<br />        }<br />        <br />        public void WriterOut(String name,Collection list) throws IOException{<br />                String path = "d:/"+name;<br />        <br />        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path)));<br />        int count = list.size();<br /><br />        String csvData[] = new String[count];<br />        <br />        Iterator it = list.iterator();<br />        <br />        int i = 0;<br />        while(it.hasNext()){<br />                String temp = (String)it.next();<br />                System.out.println(temp);<br />                csvData[i] = temp;<br />                i++;<br />        }<br />        <br />        for(int j = 0;j &lt; csvData.length;j++)<br />                {<br />                        writer.write(csvData[j] + LINE_SEPARATOR);<br />                        <br />                }<br />        writer.close();<br />       <br />        }<br />        <br />        public void SelectDB(){<br />                try{<br />                        getConnection();<br />                        Statement stmt  = this.conn.createStatement();<br />                        String SQL = "select id ,name ,age ,address  from test";<br />                        ResultSet rs = stmt.executeQuery(SQL);<br /><br />                        Collection col = new ArrayList();<br />                        <br />                        ResultSetMetaData ss = rs.getMetaData();        <br />                        int count = ss.getColumnCount();<br /><br />                        String temp = "";<br />                        for(int j = 1; j &lt;= count; j++){<br />                                System.out.print(ss.getColumnName(j)+"        ");<br /><br />                                if(j == count){<br />                                        temp = temp + ss.getColumnName(j);<br />                                }else{<br />                                        temp = temp + ss.getColumnName(j)+",";<br />                                }<br />                        }<br />                        col.add(temp);<br />         <br />                        System.out.println(" ");<br />                        <br />                        while(rs.next()){        <br />                                temp = "";<br />                                for (int i = 1; i &lt;= count;i++){<br />                                        System.out.print(rs.getString(i)+" ");<br />                                        if(i == count){<br />                                                temp = temp + "\""+ rs.getString(i) + "\"";<br />                                        }else{<br />                                                temp = temp + "\""+ rs.getString(i) + "\",";<br />                                        }        <br />                                }<br />                                col.add(temp);   //<br />                                System.out.println(" ");<br />                        }<br />                        getResult(0,col);<br />                        closeConnection();<br />                }catch(Exception e){<br />                        e.printStackTrace();<br />                }<br />        }<br />        <br />        public void InsertDB(){<br />                try{<br />                        getConnection();<br />                        String SQL = "insert into test values('0011','sandy','25','shanghai')";<br />                        PreparedStatement pstmt  = this.conn.prepareStatement(SQL);<br />                        <br />                        ResultSet rs = pstmt.executeQuery();<br />                        conn.commit();<br />                        <br />                        SQL = "select id ,name ,age ,address  from test";<br />                        Statement stmt = this.conn.createStatement();<br />                        rs = stmt.executeQuery(SQL);<br />                        ResultSetMetaData ss = rs.getMetaData();        <br />                        int count = ss.getColumnCount();<br /><br />                        Collection col = new ArrayList();<br />                        <br />            String temp = "";<br />                        for(int j = 1; j &lt;= count; j++){<br />                                System.out.print(ss.getColumnName(j)+"        ");<br />                                if(j == count){<br />                                        temp = temp + ss.getColumnName(j);<br />                                }else{<br />                                        temp = temp + ss.getColumnName(j)+",";<br />                                }<br />                        }<br />                        col.add(temp);<br />                        System.out.println(" ");<br />            <br />                        while(rs.next()){        <br />                                temp = "";<br />                                for (int i = 1; i &lt;= count;i++){<br />                                        System.out.print(rs.getString(i)+" ");<br />                                        if(i == count){<br />                                                temp = temp + "\""+ rs.getString(i) + "\"";<br />                                        }else{<br />                                                temp = temp + "\""+ rs.getString(i) + "\",";<br />                                        }<br />                                }<br />                                col.add(temp);<br />                                System.out.println(" ");<br />                        }<br />                        getResult(1,col);<br />                        closeConnection();<br />                }catch(Exception e){<br />                        e.printStackTrace();<br />                }<br />        }<br />        <br />        public void UpdateDB(){<br />                try{<br />                        getConnection();<br />                        String SQL = "update test set address = '上海'";<br />                        PreparedStatement pstmt  = this.conn.prepareStatement(SQL);<br />                        <br />                        ResultSet rs = pstmt.executeQuery();<br />                        conn.commit();<br />                        <br />                        SQL = "select id ,name ,age ,address  from test";<br />                        Statement stmt = this.conn.createStatement();<br />                        rs = stmt.executeQuery(SQL);<br />                        ResultSetMetaData ss = rs.getMetaData();        <br />                        int count = ss.getColumnCount();<br />                        <br />                        Collection col = new ArrayList();<br />                        <br />            String temp = "";<br />                        <br />                        for(int j = 1; j &lt;= count; j++){<br />                                System.out.print(ss.getColumnName(j)+"        ");<br />                                if(j == count){<br />                                        temp = temp + ss.getColumnName(j);<br />                                }else{<br />                                        temp = temp + ss.getColumnName(j)+",";<br />                                }<br />                        }<br />                        col.add(temp);<br /><br />                        System.out.println(" ");<br />                        <br />                        while(rs.next()){        <br />                                temp = "";<br />                                for (int i = 1; i &lt;= count;i++){<br />                                        System.out.print(rs.getString(i)+" ");<br />                                        if(i == count){<br />                                                temp = temp + "\""+ rs.getString(i) + "\"";<br />                                        }else{<br />                                                temp = temp + "\""+ rs.getString(i) + "\",";<br />                                        }<br />                                }<br />                                col.add(temp);<br />                                System.out.println(" ");<br />                        }<br />                        getResult(2,col);<br />                        closeConnection();<br />                }catch(Exception e){<br />                        e.printStackTrace();<br />                }<br />                <br />        }<br />        <br />        public void DeleteDB(){<br />                try{<br />                        getConnection();<br />                        String SQL = "delete from test where id = '0008'";<br />                        PreparedStatement pstmt  = this.conn.prepareStatement(SQL);<br />                        <br />                        ResultSet rs = pstmt.executeQuery();        <br />                        conn.commit();<br />                        <br />                        SQL = "select id ,name ,age ,address  from test";<br />                        Statement stmt = this.conn.createStatement();<br />                        rs = stmt.executeQuery(SQL);<br />                        ResultSetMetaData ss = rs.getMetaData();        <br />                        int count = ss.getColumnCount();<br />                        <br />                        Collection col = new ArrayList();<br />                        <br />            String temp = "";<br />                        <br />                        for(int j = 1; j &lt;= count; j++){<br />                                System.out.print(ss.getColumnName(j)+"        ");<br />                                if(j == count){<br />                                        temp = temp + ss.getColumnName(j);<br />                                }else{<br />                                        temp = temp + ss.getColumnName(j)+",";<br />                                }<br />                        }<br />                        col.add(temp);<br />                        System.out.println(" ");<br />                        <br />                        while(rs.next()){        <br />                                temp = "";<br />                                for (int i = 1; i &lt;= count;i++){<br />                                        System.out.print(rs.getString(i)+" ");<br />                                        if(i == count){<br />                                                temp = temp + "\""+ rs.getString(i) + "\"";<br />                                        }else{<br />                                                temp = temp + "\""+ rs.getString(i) + "\",";<br />                                        }<br />                                }<br />                                col.add(temp);<br />                                System.out.println(" ");<br />                        }<br />                        getResult(3,col);<br />                        closeConnection();<br />                }catch(Exception e){<br />                        e.printStackTrace();<br />                }<br />                <br />        }<br />        <br />        public void excute(int tag){<br />                if(tag == 0){<br />                        System.out.println("进行查询操作");<br />                        SelectDB();<br />                }else if(tag == 1){<br />                        System.out.println("进行添加操作");<br />                        InsertDB();<br />                }else if(tag == 2){<br />                        System.out.println("进行修改操作");<br />                        UpdateDB();<br />                }else if(tag == 3){<br />                        System.out.println("进行删除操作");<br />                        DeleteDB();<br />                }else{<br />                        System.out.println("标志码输入错误");<br />                }<br />        }<br />        <br />        public static void main(String[] args) <br />        {<br />                ContactTest  ct = new ContactTest ();<br />                ct.flag = 0;  //0-查询;1-添加;2-修改;3-删除<br />                ct.excute(ct.flag);<br />        }<br />        <br />}<br /><br /><img src ="http://www.blogjava.net/yezhou/aggbug/42664.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yezhou/" target="_blank">叶舟</a> 2006-04-23 15:32 <a href="http://www.blogjava.net/yezhou/articles/42664.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>计算Java日期</title><link>http://www.blogjava.net/yezhou/articles/42408.html</link><dc:creator>叶舟</dc:creator><author>叶舟</author><pubDate>Fri, 21 Apr 2006 12:47:00 GMT</pubDate><guid>http://www.blogjava.net/yezhou/articles/42408.html</guid><wfw:comment>http://www.blogjava.net/yezhou/comments/42408.html</wfw:comment><comments>http://www.blogjava.net/yezhou/articles/42408.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yezhou/comments/commentRss/42408.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yezhou/services/trackbacks/42408.html</trackback:ping><description><![CDATA[
		<strong>概要<br /></strong>    不管你是处理财务交易还是计划着下一步的行动，你都要知道怎样在Java中建立，使用和显示日期。这需要你简单的查阅一下相应类的API参考：一个日期可以创建3个相关类的对象。这篇文章告诉你你想要知道的内容。（3,000字）<br /><strong>作者：</strong>Robert Nielsen <br /><strong>翻译：</strong>Cocia Lin
<p>    Java统计从1970年1月1日起的毫秒的数量表示日期。也就是说，例如，1970年1月2日，是在1月1日后的86，400，000毫秒。同样的，1969年12月31日是在1970年1月1日前86，400，000毫秒。Java的Date类使用long类型纪录这些毫秒值.因为long是有符号整数，所以日期可以在1970年1月1日之前，也可以在这之后。Long类型表示的最大正值和最大负值可以轻松的表示290，000，000年的时间，这适合大多数人的时间要求。<br /><strong>Date 类<br />   </strong>Date类可以在java.util包中找到，用一个long类型的值表示一个指定的时刻。它的一个有用的构造函数是Date(),它创建一个表示创建时刻的对象。getTime()方法返回Date对象的long值。在下面的程序中，我使用Date()构造函数创建一个表示程序运行时刻的对象，并且利用getTime()方法找到这个日期代表的毫秒数量：</p><p>import java.util.*;</p><p><br />public class Now {<br />   public static void main(String[] args) {<br />      Date now = new Date();<br />      long nowLong = now.getTime();<br />      System.out.println("Value is " + nowLong);<br />   }<br />}<br /><br />当我运行这个程序后，我得到972,568,255,150.快速确认一下这个数字，起码在一个合理的范围：它不到31年，这个数值相对1970年1月1日到我写这篇文章的时间来说，是合理的。计算机是这个毫秒值表示时间，人们可不愿意说" 我将在996,321,998,34见到你。"幸运的是，Java提供了一个转换Date对象到字符串的途径，表示成传统的形式。我们在下一节讨论DateFormat类，它直观的建立日期字符串。 <br />DateFormat类<br /> DateFormat类的一个目标是建立一个人们能够识别的字符串。然而，因为语言的差别，不是所有的人希望看到严格的相同格式的日期。法国人更喜欢看到"25 decembre 2000,",但是美国人习惯看到"December 25,2000."所以一个DateFormat的实例创建以后，这个对象包含了日期的显示格式的信息。如果使用用户电脑区域设置缺省的格式，你可以象下面那样，创建DateFormat对象，使用getDateInstance()方法：</p><p>DateFormat df = DateFormat.getDateInstance();   <br /><br />DateFormat类在java.text包中可以找到。<br /><strong>转换成字符串<br /></strong>你可以使用format()方法转换Date对象为一个字符串。下面的示例程序说明了这个问题：</p><p>import java.util.*;<br />import java.text.*;</p><p>public class NowString {<br />   public static void main(String[] args) {<br />      Date now = new Date();<br />      DateFormat df = DateFormat.getDateInstance();<br />      String s = df.format(now);<br />      System.out.println("Today is " + s);<br />   }<br />}  <br /><br />在上面的代码中，展示了没有参数，使用缺省格式的getDateInstance()方法。Java还提供了几个选择日期格式，你可以通过使用重载的getDateInstance(int style)获得。出于方便的原因，DateFormat提供了几种预置的常量，你可以使用这些常量参数。下面是几个SHORT, MEDIUM, LONG, 和FULL类型的示例：</p><p>import java.util.*;<br />import java.text.*;</p><p>public class StyleDemo {<br />   public static void main(String[] args) {<br />      Date now = new Date();</p><p>      DateFormat df =  DateFormat.getDateInstance();<br />      DateFormat df1 = DateFormat.getDateInstance(DateFormat.SHORT);<br />      DateFormat df2 = DateFormat.getDateInstance(DateFormat.MEDIUM);<br />      DateFormat df3 = DateFormat.getDateInstance(DateFormat.LONG);<br />      DateFormat df4 = DateFormat.getDateInstance(DateFormat.FULL); <br />      String s =  df.format(now);<br />      String s1 = df1.format(now);<br />      String s2 = df2.format(now);<br />      String s3 = df3.format(now);<br />      String s4 = df4.format(now);</p><p>      System.out.println("(Default) Today is " + s);<br />      System.out.println("(SHORT)   Today is " + s1);<br />      System.out.println("(MEDIUM)  Today is " + s2);<br />      System.out.println("(LONG)    Today is " + s3);<br />      System.out.println("(FULL)    Today is " + s4);<br />   }<br />}<br /><br />程序输出如下：</p><p>(Default) Today is Nov 8, 2000<br />(SHORT)   Today is 11/8/00<br />(MEDIUM)  Today is Nov 8, 2000<br />(LONG)    Today is November 8, 2000<br />(FULL)    Today is Wednesday, November 8, 2000<br /><br />同样的程序，在我的电脑上使用缺省设置运行后，改变区域设置为瑞典，输出如下：</p><p>(Default) Today is 2000-nov-08<br />(SHORT)   Today is 2000-11-08<br />(MEDIUM)  Today is 2000-nov-08<br />(LONG)    Today is den 8 november 2000<br />(FULL)    Today is den 8 november 2000     <br />  <br />从这里，你能看到，瑞典的月份不是大写的（虽然November还是november）.还有，LONG和FULL版本在瑞典语中是一样的，但是美国英语却不同。另外，有趣的是，瑞典语单词的星期三,onsdag，没有包含在FULL日期里，英语却包括。 <br />注意你能够使用getDateInstance()方法改变DateFormat实例的语种；但是，在上面的例子中，是通过改变Windows98的控制面板的区域设置做到的。不同的地方的区域设置不同，结果就不同，这样有好处，也有不足，Java程序员应该了解这些。一个好处是Java程序员可以只写一行代码就可以显示日期，而且世界不同地区的电脑运行同样的程序会有不用的日期格式。 但是这也是一个缺点，当程序员希望显示同一种格式的时--这也有可取之处，举例来说，在程序中混合输出文本和日期，如果文本是英文，我们就不希望日期格式是其他的格式，象德文或是西班牙文。如果程序员依靠日期格式编程，日期格式将根据运行程序所在电脑的区域设置不用而不同。 <br /><font size="4"><strong>解析字符串</strong></font><br /> 通过parse()方法，DateFormat能够以一个字符串创立一个Date对象。这个方法能抛出ParseException异常，所以你必须使用适当的异常处理技术。下面的例子程序通过字符串创建Date对象：</p><p>import java.util.*;<br />import java.text.*;</p><p>public class ParseExample {<br />   public static void main(String[] args) {<br />      String ds = "November 1, 2000";<br />      DateFormat df = DateFormat.getDateInstance();<br />      try {<br />         Date d = df.parse(ds);<br />      }<br />      catch(ParseException e) {<br />         System.out.println("Unable to parse " + ds);<br />      }<br />   }<br />}<br /><br />在创建一个任意的日期时parse()方法很有用。我将通过另一种方法创建一个任意得日期。同时，你将看到怎样进行基本日期计算，例如计算90天后的另一天。你可以使用GregorianCalendar类来完成这个任务。 <br /><strong>GregorianCalendar类</strong><br /> 创建一个代表任意日期的一个途径使用GregorianCalendar类的构造函数，它包含在java.util包中：</p><p>GregorianCalendar(int year, int month, int date) <br /><br />注意月份的表示，一月是0，二月是1，以此类推，是12月是11。因为大多数人习惯于使用单词而不是使用数字来表示月份，这样程序也许更易读，父类Calendar使用常量来表示月份：JANUARY, FEBRUARY,等等。所以，创建Wilbur 和 Orville制造第一架动力飞机的日期（December 17, 1903），你可以使用：</p><p>GregorianCalendar firstFlight = new GregorianCalendar(1903, Calendar.DECEMBER, 17);  <br />出于清楚的考虑，你应该使用前面的形式。但是，你也应该学习怎样阅读下面的短格式。下面的例子同样表示December 17,1903（记住，在短格式中，11表示December）</p><p>GregorianCalendar firstFlight = new GregorianCalendar(1903, 11, 17);   <br /><br />在上一节中，你学习了转换Date对象到字符串。这里，你可以做同样的事情；但是首先，你需要将GregorianCalendar对象转换到Date。要做到这一点，你可以使用getTime()方法，从它得父类Calendar继承而来。GetTime()方法返回GregorianCalendar相应的Date对象。你能够创建GregorianCalendar对象，转换到Date对象，得到和输出相应的字符串这样一个过程。下面是例子： </p><p>import java.util.*;<br />import java.text.*;</p><p>public class Flight {</p><p>   public static void main(String[] args) {<br />      GregorianCalendar firstFlight = new GregorianCalendar(1903, Calendar.DECEMBER, 17);    <br />      Date d = firstFlight.getTime();<br />      DateFormat df = DateFormat.getDateInstance();<br />      String s = df.format(d);<br />      System.out.println("First flight was " + s);<br />   }<br />}<br /><br />有时候创建一个代表当前时刻的GregorianCalendar类的实例是很有用的。你可以简单的使用没有参数的GregorianCalendar构造函数，象这样：</p><p>GregorianCalendar thisday = new GregorianCalendar();<br /><br />一个输出今天日期的例子程序，使用GregorianCalendar对象：</p><p>import java.util.*;<br />import java.text.*;</p><p>class Today {<br />   public static void main(String[] args) {<br />      GregorianCalendar thisday = new GregorianCalendar(); <br />      Date d = thisday.getTime();<br />      DateFormat df = DateFormat.getDateInstance();<br />      String s = df.format(d);<br />      System.out.println("Today is " + s);<br />   }<br />}<br /><br />注意到，Date()构造函数和GregorianCalendar()构造函数很类似：都创建一个对象，条件简单，代表今天。<br /><strong>日期处理<br /></strong>GregorianCalendar类提供处理日期的方法。一个有用的方法是add().使用add()方法，你能够增加象年，月数，天数到日期对象中。要使用add()方法，你必须提供要增加的字段，要增加的数量。一些有用的字段是DATE, MONTH, YEAR, 和 WEEK_OF_YEAR。下面的程序使用add()方法计算未来80天的一个日期。在Jules的&lt;环球80天&gt;是一个重要的数字，使用这个程序可以计算Phileas Fogg从出发的那一天1872年10月2日后80天的日期：</p><p>import java.util.*;<br />import java.text.*;</p><p>public class World {<br />   public static void main(String[] args) {<br />      GregorianCalendar worldTour = new GregorianCalendar(1872, Calendar.OCTOBER, 2);<br />      worldTour.add(GregorianCalendar.DATE, 80);<br />      Date d = worldTour.getTime();<br />      DateFormat df = DateFormat.getDateInstance();<br />      String s = df.format(d);<br />      System.out.println("80 day trip will end " + s);<br />   }<br />}<br /><br />这个例子是想象的，但在一个日期上增加天数是一个普遍的操作：影碟可以租3天，图书馆可以借书21天，商店经常需要将购买的物品在30天内卖出。下面的程序演示了使用年计算：</p><p>import java.util.*;<br />import java.text.*;</p><p>public class Mortgage {<br />   public static void main(String[] args) {<br />      GregorianCalendar mortgage = new GregorianCalendar(1997, Calendar.MAY, 18);<br />      mortgage.add(Calendar.YEAR, 15);<br />      Date d = mortgage.getTime();<br />      DateFormat df = DateFormat.getDateInstance();<br />      String s = df.format(d);<br />      System.out.println("15 year mortgage amortized on " + s);    }<br />}<br /><br />    add()一个重要的副作用是它改变的原来的日期。有时候，拥有原始日期和修改后的日期很重要。不幸的是，你不能简单的创建一个GregorianCalendar对象，设置它和原来的相等（equal）。原因是两个变量指向同一个Date()对象地址。如果Date对象改变，两个变量就指向改变后的日期对象。代替这种做法，应该创建一个新对象。下面的程序示范了这种做法：</p><p>import java.util.*;<br />import java.text.*;</p><p>public class ThreeDates {<br />   public static void main(String[] args) {<br />      GregorianCalendar gc1 = new GregorianCalendar(2000, Calendar.JANUARY, 1);<br />      GregorianCalendar gc2 = gc1;<br />      GregorianCalendar gc3 = new GregorianCalendar(2000, Calendar.JANUARY, 1);<br />      //Three dates all equal to January 1, 2000</p><p>      gc1.add(Calendar.YEAR, 1);<br />      <a href="file://gc1/"><font face="Arial" color="#0030ce">file://gc1</font></a> and gc2 are changed</p><p>      DateFormat df = DateFormat.getDateInstance();</p><p>      Date d1 = gc1.getTime();<br />      Date d2 = gc2.getTime();<br />      Date d3 = gc3.getTime();</p><p>      String s1 = df.format(d1);<br />      String s2 = df.format(d2);<br />      String s3 = df.format(d3);</p><p>      System.out.println("gc1 is " + s1);<br />      System.out.println("gc2 is " + s2);<br />      System.out.println("gc3 is " + s3);<br />   }<br />}<br /><br />    程序运行后，gc1和gc2被变成2001年（因为两个对象指向同一个Date，而Date已经被改变了）。对象gc3指向一个单独的Date，它没有被改变。<br />计算复习日期<br />在这节，你将看到一个依据现实世界的例子。这个详细的程序计算过去一个具体的日期。例如，你阅读这篇文章，你想要记住一个印象深刻的知识点。如果你没有照片一样的记忆力，你就要定期的复习这些新资料，这将帮助你记住它。关于复习系统，Kurt Hanks 和 Gerreld L. Pulsipher在他们的&lt; Five Secrets to Personal Productivity个人能力的5个秘密&gt;中有讨论，建议看过第一眼后马上回顾一下，然后是1天后，1个星期后，1个月后，3个月后，1年后。我的这篇文章，你要马上回顾一下，从现在算起，再就是明天，然后是1个星期，1个月，3个月，1年后。我们的程序将计算这些日期。<br />这个程序非常有用的，它将是PIM(Personal Information Manager个人信息管理器)的一个组成部分，并将确定复习时间。在下面的程序中，getDates()方法对一个返回日期数组（复习日期）的电子软件很有用。另外，你可以返回单独的一个日期，使用getFirstDay(),getOneDay(),getOneWeek(),getOnMonth()和getOneYear().当时间范围超出这个PIM的ReviewDates的计算范围时ReviewDates类演示了怎样计算时间段。现在，你可以容易的修改它用来处理你需要的时间段，象图书馆借书，录影带租赁和抵押计算。首先，ReviewDates类显示在下面：</p><p>import java.util.*;<br />import java.text.*;</p><p>public class ReviewDates {<br />   private GregorianCalendar firstDay, oneDay, oneWeek, oneMonth, oneQuarter, oneYear;<br />   final int dateArraySize = 6;</p><p>   ReviewDates(GregorianCalendar gcDate) {<br />      int year = gcDate.get(GregorianCalendar.YEAR);<br />      int month = gcDate.get(GregorianCalendar.MONTH);<br />      int date = gcDate.get(GregorianCalendar.DATE);</p><p>      firstDay = new GregorianCalendar(year, month, date);<br />      oneDay = new GregorianCalendar(year, month, date);<br />      oneWeek = new GregorianCalendar(year, month, date);<br />      oneMonth = new GregorianCalendar(year, month, date);<br />      oneQuarter = new GregorianCalendar(year, month, date);<br />      oneYear = new GregorianCalendar(year, month, date);</p><p>      oneDay.add(GregorianCalendar.DATE, 1);<br />      oneWeek.add(GregorianCalendar.DATE, 7);<br />      oneMonth.add(GregorianCalendar.MONTH, 1);<br />      oneQuarter.add(GregorianCalendar.MONTH, 3);<br />      oneYear.add(GregorianCalendar.YEAR, 1);<br />   }</p><p>   ReviewDates() {<br />      this(new GregorianCalendar());<br />   }</p><p>   public void listDates() {<br />      DateFormat df = DateFormat.getDateInstance(DateFormat.LONG); <br />      Date startDate = firstDay.getTime();<br />      Date date1 = oneDay.getTime();<br />      Date date2 = oneWeek.getTime();<br />      Date date3 = oneMonth.getTime();<br />      Date date4 = oneQuarter.getTime();<br />      Date date5 = oneYear.getTime();</p><p>      String ss =  df.format(startDate);<br />      String ss1 = df.format(date1);<br />      String ss2 = df.format(date2);<br />      String ss3 = df.format(date3);<br />      String ss4 = df.format(date4);<br />      String ss5 = df.format(date5);</p><p>      System.out.println("Start date is " + ss);<br />      System.out.println("Following review dates are:");<br />      System.out.println(ss1);<br />      System.out.println(ss2);<br />      System.out.println(ss3);<br />      System.out.println(ss4);<br />      System.out.println(ss5);<br />      System.out.println();<br />   }</p><p>   public GregorianCalendar[] getDates() {<br />      GregorianCalendar[] memoryDates = new GregorianCalendar[dateArraySize];<br />      memoryDates[0] = firstDay;<br />      memoryDates[1] = oneDay;<br />      memoryDates[2] = oneWeek;<br />      memoryDates[3] = oneMonth;<br />      memoryDates[4] = oneQuarter;<br />      memoryDates[5] = oneYear;<br />      return memoryDates;<br />   }</p><p>   public GregorianCalendar getFirstDay() {<br />      return this.firstDay;<br />   }</p><p>   public GregorianCalendar getOneDay() {<br />      return this.oneDay;<br />   }</p><p>   public GregorianCalendar getOneWeek() {<br />      return this.oneWeek;<br />   }</p><p>   public GregorianCalendar getOneMonth() {<br />      return this.oneMonth;<br />   }</p><p>   public GregorianCalendar getOneQuarter() {<br />      return this.oneQuarter;<br />   }</p><p>   public GregorianCalendar getOneYear() {<br />      return this.oneYear;<br />   }<br />} <br /><br />下面是使用ReviewDates类列出复习日期的例子程序：</p><p>import java.util.*;</p><p>public class ShowDates {<br />   public static void main(String[] args) {<br />      ReviewDates rd = new ReviewDates();<br />      rd.listDates();</p><p>      GregorianCalendar gc = new GregorianCalendar(2001, Calendar.JANUARY, 15);<br />      ReviewDates jan15 = new ReviewDates(gc);<br />      jan15.listDates();<br />   }<br />}<br /><br /></p><img src ="http://www.blogjava.net/yezhou/aggbug/42408.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yezhou/" target="_blank">叶舟</a> 2006-04-21 20:47 <a href="http://www.blogjava.net/yezhou/articles/42408.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>