<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>老刘的博客 &#187; java</title>
	<atom:link href="http://www.laoliu.org/blog/archives/category/java/feed" rel="self" type="application/rss+xml" />
	<link>http://www.laoliu.org/blog</link>
	<description>IT民工Blog</description>
	<lastBuildDate>Thu, 22 Sep 2011 23:38:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>android文档阅读顺序</title>
		<link>http://www.laoliu.org/blog/archives/137</link>
		<comments>http://www.laoliu.org/blog/archives/137#comments</comments>
		<pubDate>Thu, 25 Sep 2008 02:14:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[android]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.laoliu.org/blog/?p=137</guid>
		<description><![CDATA[1. 首先当然是要知道，什么是Android？ 2. 读一下Anatomy of an Android Application 能够知道一个Android application 中到底都有些什么东西 3.  接着可以读一下 Development Tools 文档 4.  然后可以看一下关于什么周期的文章 Lifecycle of an Android Application 5. 现在可以动手了，玩玩hello world 吧，Hello Android 6. 回去读一下 Installing the SDK文档，再这篇文章的后半部分讲了很多关于Debug的功能和技巧 7. 开始Notepad Application 的制作和学习吧，如果你真正弄懂了关于这个应用程序的4个练习，你已经从菜鸟开始转向高手喽。 8. Developing Android Applications 花了很多时间来介绍更多的细节，包括如何实现UI，数据存储和读取，安全问题等 9. 最后，你现在可以自由的漫步在links中了，找你感兴趣的读读吧。]]></description>
			<content:encoded><![CDATA[<p>1. 首先当然是要知道，<a href="http://code.google.com/android/what-is-android.html" target="_blank">什么是Android？</a><br />
2. 读一下<a href="http://code.google.com/android/intro/anatomy.html" target="_blank"><span style="text-decoration: underline;">Anatomy of an Android Application</span></a> 能够知道一个Android application 中到底都有些什么东西<br />
3.  接着可以读一下 <a href="http://code.google.com/android/intro/tools.html" target="_blank"><span style="text-decoration: underline;">Development Tools</span></a> 文档<br />
4.  然后可以看一下关于什么周期的文章 <a href="http://code.google.com/android/intro/lifecycle.html" target="_blank"><span style="text-decoration: underline;">Lifecycle of an Android Application</span></a><br />
5. 现在可以动手了，玩玩hello world 吧，<a href="http://code.google.com/android/intro/hello-android.html" target="_blank"><span style="text-decoration: underline;">Hello Android</span></a><br />
6. 回去读一下 <a href="http://code.google.com/android/intro/installing.html" target="_blank"><span style="text-decoration: underline;">Installing the SDK</span></a>文档，再这篇文章的后半部分讲了很多关于Debug的功能和技巧<br />
7. 开始Notepad Application 的制作和学习吧，如果你真正弄懂了关于这个应用程序的4个练习，你已经从菜鸟开始转向高手喽。<br />
8. <a href="http://code.google.com/android/devel/index.html" target="_blank"><span style="text-decoration: underline;">Developing Android Applications</span></a> 花了很多时间来介绍更多的细节，包括如何实现UI，数据存储和读取，安全问题等<br />
9. 最后，你现在可以自由的漫步在links中了，找你感兴趣的读读吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.laoliu.org/blog/archives/137/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>统计java代码行数（转自CSDN）</title>
		<link>http://www.laoliu.org/blog/archives/112</link>
		<comments>http://www.laoliu.org/blog/archives/112#comments</comments>
		<pubDate>Tue, 11 Mar 2008 07:27:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.laoliu.org/blog/?p=112</guid>
		<description><![CDATA[package com.huawei.sw1.clog; import java.io.File; import java.io.FileReader; import java.io.LineNumberReader; import java.io.IOException; /** * @author zez * * 源文件代码行统计工具Java版 */ public class Clog { //多文件代码统计汇总结果 private int gcommentLineNum = 0; private int gcodeAndCommentLinNum = 0; private int gblankLineNum = 0; private int gtotalLineNum = 0; private int gblankAndCommentLinNum = 0; //单个文件统计信息 private LineNumberReader lReader; private int commentLineNum [...]]]></description>
			<content:encoded><![CDATA[<p><coolcode lang="java"><br />
package com.huawei.sw1.clog;</p>
<p>import java.io.File;<br />
import java.io.FileReader;<br />
import java.io.LineNumberReader;<br />
import java.io.IOException;</p>
<p>/**<br />
* @author zez<br />
*<br />
* 源文件代码行统计工具Java版 <img src='http://www.laoliu.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
*/<br />
public class Clog {</p>
<p>//多文件代码统计汇总结果<br />
private int gcommentLineNum = 0;</p>
<p>private int gcodeAndCommentLinNum = 0;</p>
<p>private int gblankLineNum = 0;</p>
<p>private int gtotalLineNum = 0;</p>
<p>private int gblankAndCommentLinNum = 0;</p>
<p>//单个文件统计信息<br />
private LineNumberReader lReader;</p>
<p>private int commentLineNum = 0;</p>
<p>private int codeAndCommentLinNum = 0;</p>
<p>private int blankLineNum = 0;</p>
<p>private int totalLineNum = 0;</p>
<p>private int blankAndCommentLinNum = 0;</p>
<p>// private int logicLineNum = 0;</p>
<p>//初始化<br />
private void init() {<br />
lReader = null;<br />
commentLineNum = 0;<br />
codeAndCommentLinNum = 0;<br />
blankLineNum = 0;<br />
totalLineNum = 0;<br />
blankAndCommentLinNum = 0;<br />
// logicLineNum = 0;<br />
}</p>
<p>/**<br />
* 判断文件类型,并取得此文件<br />
*<br />
* @param fileName<br />
* @return file, if not a source code file, return NULL .<br />
*/<br />
private File getSourceFile(String fileName) {<br />
if (fileName == null || fileName.trim().length() == 0) {<br />
System.out.println(“\nThe file name /* is null !\n”);<br />
return null;<br />
}<br />
File file = new File(fileName);<br />
// 如果是目录,返回此目录<br />
if (file.isDirectory()) {<br />
return file;<br />
}<br />
//文件是否存在<br />
if (!file.exists()) {<br />
System.out.println(“\nThe file ” + fileName<br />
+ ” is don&#8217;t exists !\n”);<br />
return null;<br />
}</p>
<p>/**<br />
* 判断是否是.c .cpp .java文件<br />
*/<br />
if (fileName.indexOf(&#8216;.&#8217;) &gt; 0) {<br />
String fileExt = fileName.substring(fileName.lastIndexOf(&#8216;.&#8217;) + 1).toLowerCase();<br />
if (!fileExt.equals(“c”) &amp;&amp; !fileExt.equals(“cpp”) &amp;&amp; !fileExt.equals(“h”)<br />
&amp;&amp; !fileExt.equals(“java”)&amp;&amp; !fileExt.equals(“hpp”)) {</p>
<p>System.out.println(“\nThe file ” + fileName<br />
+ ” is not a C or C++ or JAVA source file !\n”);<br />
return null;</p>
<p>}<br />
}</p>
<p>//文件大小是否大于64k,不过大于64k仍可以计算<br />
if (file.length() &gt; 65535) {<br />
System.out.println(“\nThe file ” + fileName<br />
+ ” is too large than 64k ,but It can work <img src='http://www.laoliu.org/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> !\n”);<br />
}<br />
//文件大小如果小于3个字节,返回空<br />
if (file.length() &lt; 3) {<br />
System.out.println(“\nThe file ” + fileName<br />
+ ” has no content \n”);<br />
return null;<br />
}</p>
<p>return file;<br />
}</p>
<p>/**<br />
* 打开文件<br />
* @param file<br />
* @throws Exception<br />
*/<br />
private void openFile(File file) throws Exception {<br />
try {<br />
lReader = new LineNumberReader(new FileReader(file));<br />
} catch (Exception e) {<br />
throw e;<br />
}<br />
}</p>
<p>/***************************************************************************<br />
* 行数计算主函数 算法: 循环每次读取一行,分几种情况进行计算 1.空行 2.//开头 肯定为注释行 3.//在代码后面,<br />
* 按代码行算,并处理//在字符串中情况 4.以/*开头的情况,调用专门块注释计算方法 5./* 在代码后面情况,处理同上<br />
*<br />
*/</p>
<p>private void countLineNum() throws Exception {</p>
<p>try {<br />
while (true) { //未到文件尾<br />
String str = lReader.readLine(); //取得一行代码</p>
<p>totalLineNum++; //总行数加一</p>
<p>if (str == null) { //判断是否为文件尾</p>
<p>totalLineNum&#8211;;<br />
return;<br />
} else { //否则进行计算<br />
str = str.trim(); //去两头空格<br />
// countLogicLineNum(str);<br />
if (str.length() == 0) { //如果为空,则为空行,空行数加一<br />
blankLineNum++;</p>
<p>} else if (str.startsWith(“//”)) { //如果是以//开头,为注释行,即使此行有//注释,但非开头,则要按代码行算<br />
commentLineNum++;</p>
<p>} else if (str.indexOf(“//”) &gt; 0 &amp;&amp; isNotInStr(str, “//”)) { // //在行中,并判断不是在字符串中<br />
codeAndCommentLinNum++;<br />
} else if (str.indexOf(“/*”) &gt;= 0) {<br />
//如果/*在行中,判断是否是在”"内 ,否则为注释行<br />
if (isNotInStr(str, “/*”)) {<br />
countCommentLin(str);//计算/**/ 内的注释行数<br />
}<br />
}<br />
}<br />
}<br />
} catch (IOException e) {<br />
throw new Exception(“文件读取时出错 !\n”);<br />
}<br />
}</p>
<p>/**<br />
* 块注释计算方法 判断是否块注释结束 否则读下一行 循环<br />
*/<br />
private void countCommentLin(String str) throws Exception {<br />
try {<br />
commentLineNum++;<br />
//处理 /*some comment */ 即只一行的情况,并处理 /*/ 这种情况<br />
if((str.substring( str.indexOf( “/*”)+2).indexOf( “*/”)&gt;=0)){<br />
//是否有代码<br />
if(str.length() &gt; str.indexOf( “*/”)-str.indexOf( “/*”)){<br />
codeAndCommentLinNum++;<br />
commentLineNum&#8211;;<br />
// countLogicLineNum(str);<br />
}<br />
//处理 /*xxx*/ some code /* 这种情况<br />
if(str.lastIndexOf( “*/”)&gt;str.lastIndexOf( “/*”)+1)<br />
{<br />
// countLogicLineNum(str);<br />
return;<br />
}<br />
}<br />
//一般情况, some code /* some comment<br />
if(str.indexOf( “/*”)&gt;0){<br />
codeAndCommentLinNum++;<br />
commentLineNum&#8211;;<br />
}</p>
<p>do {<br />
str = lReader.readLine(); //不是注释尾,取下一行代码<br />
totalLineNum++;<br />
//如果到文件尾,返回<br />
if (str == null) {<br />
totalLineNum&#8211;;<br />
return;<br />
}<br />
str = str.trim(); //去空格<br />
//是否到注释尾,如果后面还有代码,按混合行算<br />
if (str.indexOf(“*/”) &gt;= 0) {<br />
commentLineNum++;<br />
if (str.length() &gt; str.indexOf(“*/”) + 2) {<br />
codeAndCommentLinNum++;<br />
commentLineNum&#8211;;<br />
// countLogicLineNum(str);<br />
}<br />
return;<br />
} else {<br />
if (str.length() == 0) { //是空行<br />
blankLineNum++; //空行加一<br />
blankAndCommentLinNum++; //注释中空行加一<br />
} else {<br />
commentLineNum++; //注释加一<br />
}<br />
}<br />
} while (true);</p>
<p>} catch (IOException e) {<br />
throw new Exception(“文件读取时出错 !\n”);<br />
}<br />
}<br />
/*<br />
* 判断 某字符 是否是字符串中,特别注释字符. 算法 : 字符串中是否有注释符号 如没有,返回 false 字符串中有 ”<br />
* ,如没有,返回true 注释符号在”"之前,返回true;否则,继续 str = str的非\”的”后面部分 循环<br />
*/<br />
private boolean isNotInStr(String str, String subStr) {</p>
<p>while (str.indexOf(subStr) &gt;= 0) {<br />
if (str.indexOf(&#8216;”&#8216;) &gt;= 0) {<br />
if (str.indexOf(&#8216;”&#8216;) &gt; str.indexOf(subStr)) {<br />
return true;<br />
} else {<br />
str = str.substring(str.indexOf(&#8216;”&#8216;) + 1);</p>
<p>while (str.indexOf(&#8216;\\&#8217;) &gt;= 0<br />
&amp;&amp; str.indexOf(&#8216;”&#8216;) == str.indexOf(&#8216;\\&#8217;) + 1) {<br />
str = str.substring(str.indexOf(&#8216;”&#8216;) + 1);<br />
}<br />
str = str.substring(str.indexOf(&#8216;”&#8216;) + 1);<br />
}<br />
} else {<br />
return true;<br />
}<br />
}<br />
return false;<br />
}<br />
/**<br />
* 计算一行中的逻辑代码行<br />
* 基本法:计算代码行中的 ; 和 { 的个数<br />
* 缺陷: 现在无法对注释中的 ; 和 { 情况进行剔除 (//后面的注释和 块注释尾标志所在行的注释)<br />
* 有兴趣的话来完成吧:)<br />
* 做完了最好给我发一份过来 .OK<br />
* @param str<br />
*/<br />
/* private void countLogicLineNum(String str)<br />
{<br />
String aStr = str;<br />
while(aStr.indexOf( “;”)&gt;0 &amp;&amp; isNotInStr(aStr,”;”))<br />
{<br />
logicLineNum++;<br />
aStr = aStr.substring( aStr.indexOf( “;”)+1);<br />
}<br />
aStr = str;<br />
while(aStr.indexOf( “{“)&gt;=0)<br />
{<br />
logicLineNum++;<br />
aStr = aStr.substring( aStr.indexOf( “{“)+1);<br />
}</p>
<p>}**/<br />
/**<br />
* 打印计算结果<br />
*<br />
*/<br />
private void printResult() {</p>
<p>int codeLineNum = totalLineNum &#8211; blankLineNum &#8211; commentLineNum;<br />
System.out.println(“总行数为 : ” + totalLineNum);<br />
System.out.println(“代码行数为 : ” + codeLineNum);<br />
System.out.println(“总注释行数为 : ”<br />
+ (commentLineNum + codeAndCommentLinNum));<br />
System.out.println(“空行数为 : ” + blankLineNum);<br />
System.out.println(“混合行数为 : ” + codeAndCommentLinNum);<br />
System.out.println(“纯注释行数为 : ” + commentLineNum);<br />
System.out.println(“注释中空行数为: ” + blankAndCommentLinNum);<br />
// System.out.println(“逻辑代码行数为 : ” + logicLineNum);<br />
int commentRat ;<br />
if((commentLineNum + codeAndCommentLinNum)==0 || totalLineNum==0 )<br />
{<br />
commentRat = 0;<br />
}else{<br />
commentRat = (100 * (commentLineNum + codeAndCommentLinNum) / totalLineNum);<br />
}<br />
System.out.println(“注释率为 : ”<br />
+ commentRat<br />
+ “%”);<br />
}</p>
<p>/**<br />
* 打印计算结果<br />
*<br />
*/<br />
private void printTotalResult() {</p>
<p>int gcodeLineNum = gtotalLineNum &#8211; gblankLineNum &#8211; gcommentLineNum;<br />
System.out.println(“总行数为 : ” + gtotalLineNum);<br />
System.out.println(“代码行数为 : ” + gcodeLineNum);<br />
System.out.println(“总注释行数为 : ”<br />
+ (gcommentLineNum + gcodeAndCommentLinNum));<br />
System.out.println(“空行数为 : ” + gblankLineNum);<br />
System.out.println(“混合行数为 : ” + gcodeAndCommentLinNum);<br />
System.out.println(“纯注释行数为 : ” + gcommentLineNum);<br />
System.out.println(“注释中空行数为: ” + gblankAndCommentLinNum);<br />
// System.out.println(“逻辑代码行数为 : ” + logicLineNum);<br />
int commentRat ;<br />
if((gcommentLineNum + gcodeAndCommentLinNum)==0 || gtotalLineNum==0 )<br />
{<br />
commentRat = 0;<br />
}else{<br />
commentRat = (100 * (gcommentLineNum + gcodeAndCommentLinNum) / gtotalLineNum);<br />
}<br />
System.out.println(“注释率为 : ” + commentRat+ “%”);<br />
}<br />
/**<br />
* 统计结果汇总<br />
*<br />
*/<br />
private void countTotalNum(){<br />
gcommentLineNum += commentLineNum ;<br />
gcodeAndCommentLinNum += codeAndCommentLinNum;<br />
gblankLineNum += blankLineNum;<br />
gtotalLineNum += totalLineNum;<br />
gblankAndCommentLinNum += blankAndCommentLinNum;<br />
}<br />
/**<br />
* 嵌套计算文件夹内所有文件<br />
* @param fileName //文件或目录名<br />
* @throws Exception<br />
*/<br />
private void count(String fileName) throws Exception {<br />
try {<br />
File file = getSourceFile(fileName);<br />
if (null != file) {<br />
if (file.isFile()) {<br />
System.out.println(“\n源文件: ” + fileName + ” 统计信息为: “);<br />
init();<br />
openFile(file);<br />
countLineNum();<br />
printResult();<br />
countTotalNum();<br />
} else if (file.isDirectory()) {<br />
String[] fNameList = file.list();<br />
for (int i = 0; i &lt; fNameList.length; i++) {<br />
count(fileName + “\\” + fNameList[i]);<br />
}<br />
}<br />
}<br />
} catch (Exception e) {<br />
throw e;<br />
}<br />
}</p>
<p>public static void main(String[] args) {<br />
try {<br />
String fileName;<br />
if (args == null || args.length == 0) {<br />
System.out.println(“请输入要统计的文件或目录:\n”);<br />
byte[] buff = new byte[255];<br />
System.in.read(buff);<br />
fileName = new String(buff).trim();</p>
<p>} else {<br />
fileName = args[0];<br />
}<br />
// fileName = “c:\\test”;</p>
<p>Clog clog = new Clog();<br />
long begin = System.currentTimeMillis() ;<br />
clog.count(fileName);<br />
if(new File(fileName).isDirectory() ){<br />
System.out.println(“目录 “+fileName+” 下所有源文件统计汇总如下:\n”) ;<br />
clog.printTotalResult() ;<br />
}<br />
long end = System.currentTimeMillis() ;<br />
System.out.println(“\n 用时: “+(end-begin)+” 毫秒 .”) ;<br />
} catch (Exception e) {<br />
if(null==e.getMessage() || e.getMessage().trim() .length() ==0){<br />
System.out.println(” 系统出错,错误信息为 :\n”) ;<br />
e.printStackTrace() ;<br />
}else{<br />
System.out.println(” 程序出错,错误信息为 :\n ” + e.getMessage());<br />
}<br />
}<br />
}<br />
}<br />
</coolcode></p>
]]></content:encoded>
			<wfw:commentRss>http://www.laoliu.org/blog/archives/112/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>eclipse中用gtalk聊天</title>
		<link>http://www.laoliu.org/blog/archives/111</link>
		<comments>http://www.laoliu.org/blog/archives/111#comments</comments>
		<pubDate>Fri, 07 Mar 2008 04:14:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[google]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.laoliu.org/blog/?p=111</guid>
		<description><![CDATA[因公司不允许msn，所以一直靠gmail中的gtalk联系。昨天突然想到是否可以开发一个插件把gtalk放到eclipse呢。 先上网一搜，发现eclipse官方有ECF的插件，而且都到1.2几了。 二话不说，安装测试。 先检查自己eclipse版本是不是Europa，我的是3.3.1，没问题，3.2的版本可能会出现包依赖问题，遇到这种情况可以自行下载依赖包或者直接更换eclipse。 1，从Help -&#62; Software Updates -&#62; Find and Install菜单进入后，选择search for new features to install，点击next，选上Europa Discovery Site 的服务器，（如果是低版本的可以新建Remote Site，地址是：http://download.eclipse.org/releases/europa），点Finish。 2，进入列表后选择Communications ，只要选择里边的CORE的部分就可以了。 3，完成后重启一下eclipse 4，这时候在eclipse的右上部分，切换视图的地方就多了一个&#8217;Communications&#8217; 的视图可以选择，切换进去，在eclipse的上部，按钮那一排里多了一个带下拉菜单的小人头的图标，点下拉菜单选择XMPPS，填入gmail地址跟密码。好了，你应该看到左边工作区跟下边工作区多了，contacts栏跟messages栏，你应该会用了吧。 5，切换回java的视图，在wondow-&#62;show view里选择上contacts跟messages视图，根据自己喜好拖到适当的位置。 开始你的eclipse狂聊之旅吧。]]></description>
			<content:encoded><![CDATA[<p>因公司不允许msn，所以一直靠gmail中的gtalk联系。昨天突然想到是否可以开发一个插件把gtalk放到eclipse呢。</p>
<p>先上网一搜，发现eclipse官方有ECF的插件，而且都到1.2几了。<br />
二话不说，安装测试。</p>
<p>先检查自己eclipse版本是不是Europa，我的是3.3.1，没问题，3.2的版本可能会出现包依赖问题，遇到这种情况可以自行下载依赖包或者直接更换eclipse。</p>
<p>1，从Help -&gt; Software Updates -&gt; Find and Install菜单进入后，选择search for new features to install，点击next，选上Europa Discovery Site 的服务器，（如果是低版本的可以新建Remote Site，地址是：<a href="http://download.eclipse.org/releases/europa">http://download.eclipse.org/releases/europa</a>），点Finish。<br />
2，进入列表后选择Communications ，只要选择里边的CORE的部分就可以了。<br />
3，完成后重启一下eclipse<br />
4，这时候在eclipse的右上部分，切换视图的地方就多了一个&#8217;Communications&#8217; 的视图可以选择，切换进去，在eclipse的上部，按钮那一排里多了一个带下拉菜单的小人头的图标，点下拉菜单选择XMPPS，填入gmail地址跟密码。好了，你应该看到左边工作区跟下边工作区多了，contacts栏跟messages栏，你应该会用了吧。<br />
5，切换回java的视图，在wondow-&gt;show view里选择上contacts跟messages视图，根据自己喜好拖到适当的位置。</p>
<p>开始你的eclipse狂聊之旅吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.laoliu.org/blog/archives/111/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>log4j快速入门实践功略(1)</title>
		<link>http://www.laoliu.org/blog/archives/109</link>
		<comments>http://www.laoliu.org/blog/archives/109#comments</comments>
		<pubDate>Wed, 13 Feb 2008 05:04:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.laoliu.org/blog/?p=109</guid>
		<description><![CDATA[#log4j.rootLogger = [ level ] , appenderName, appenderName, #优先级level 为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、log、ALL或自定义的优先级 #Log4j常用的优先级FATAL&#62;ERROR&#62;WARN&#62;INFO&#62;DEBUG #stdout为控制台 ，Errorlog为错误记录日志 ， log4j.rootCategory=INFO,stdout,Runlog,Errorlog #输出的appender的格式为 #log4j.appender.appenderName = fully.qualified.name.of.appender.class #log4j.appender.appenderName.option1 = value1 #log4j.appender.appenderName.option = valueN #Log4j中appender支持的输出 #org.apache.log4j.ConsoleAppender 控制台 #org.apache.log4j.FileAppender 文件 #org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件 #org.apache.log4j.RollingFileAppender （文件大小到达指定尺寸的时候产生一个新的文件）， #org.apache.log4j.WriterAppender （将日志信息以流格式发送到任意指定的地方） #org.apache.log4j.net.SMTPAppender 邮件 #org.apache.log4j.jdbc.JDBCAppender 数据库 ＃定义输出的形式 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.Runlog=org.apache.log4j.DailyRollingFileAppender log4j.appender.Errorlog=org.apache.log4j.DailyRollingFileAppender #可以指定输出文件的优先级 log4j.appender.Errorlog.Threshold=ERROR #指定输出的文件 log4j.appender.Runlog.File=D:\\UserInfoSyn\\WebRoot\\WEB-INF\\runlog\\runlog.log log4j.appender.Errorlog.File=D:\\UserInfoSyn\\WebRoot\\WEB-INF\\errorlog\\errorlog.log #Log4j的layout布局 #org.apache.log4j.HTMLLayout 以HTML表格形式布局 #org.apache.log4j.PatternLayout 可以灵活地指定布局模式 [...]]]></description>
			<content:encoded><![CDATA[<p>#log4j.rootLogger = [ level ] , appenderName, appenderName,<br />
#优先级level 为 OFF、FATAL、ERROR、WARN、INFO、DEBUG、log、ALL或自定义的优先级<br />
#Log4j常用的优先级FATAL&gt;ERROR&gt;WARN&gt;INFO&gt;DEBUG</p>
<p>#stdout为控制台 ，Errorlog为错误记录日志 ，<br />
log4j.rootCategory=INFO,stdout,Runlog,Errorlog</p>
<p>#输出的appender的格式为<br />
#log4j.appender.appenderName = fully.qualified.name.of.appender.class<br />
#log4j.appender.appenderName.option1 = value1<br />
#log4j.appender.appenderName.option = valueN<br />
#Log4j中appender支持的输出<br />
#org.apache.log4j.ConsoleAppender 控制台<br />
#org.apache.log4j.FileAppender 文件<br />
#org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件<br />
#org.apache.log4j.RollingFileAppender （文件大小到达指定尺寸的时候产生一个新的文件），<br />
#org.apache.log4j.WriterAppender （将日志信息以流格式发送到任意指定的地方）<br />
#org.apache.log4j.net.SMTPAppender 邮件<br />
#org.apache.log4j.jdbc.JDBCAppender 数据库</p>
<p>＃定义输出的形式<br />
log4j.appender.stdout=org.apache.log4j.ConsoleAppender<br />
log4j.appender.Runlog=org.apache.log4j.DailyRollingFileAppender<br />
log4j.appender.Errorlog=org.apache.log4j.DailyRollingFileAppender</p>
<p>#可以指定输出文件的优先级<br />
log4j.appender.Errorlog.Threshold=ERROR</p>
<p>#指定输出的文件<br />
log4j.appender.Runlog.File=D:\\UserInfoSyn\\WebRoot\\WEB-INF\\runlog\\runlog.log<br />
log4j.appender.Errorlog.File=D:\\UserInfoSyn\\WebRoot\\WEB-INF\\errorlog\\errorlog.log</p>
<p>#Log4j的layout布局<br />
#org.apache.log4j.HTMLLayout 以HTML表格形式布局<br />
#org.apache.log4j.PatternLayout 可以灵活地指定布局模式<br />
#org.apache.log4j.SimpleLayout 包含日志信息的级别和信息字符串<br />
#org.apache.log4j.TTCCLayout 包含日志产生的时间、线程、类别等等信息</p>
<p>log4j.appender.stdout.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.Runlog.layout=org.apache.log4j.PatternLayout<br />
log4j.appender.Errorlog.layout=org.apache.log4j.PatternLayout</p>
<p>#输出格式,log4j javadoc org.apache.log4j.PatternLayout<br />
#-X号:X信息输出时左对齐；<br />
#%p:日志信息级别<br />
# %d{}:日志信息产生时间<br />
# %c:日志信息所在地（类名）<br />
# %m:产生的日志具体信息<br />
# %n:%n:输出日志信息换行<br />
log4j.appender.stdout.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n<br />
log4j.appender.Runlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n<br />
log4j.appender.Errorlog.layout.ConversionPattern= %5p %d{yyyy-MM-dd HH:mm:ss} %c %m %n</p>
<p>#指定某个包的优先级<br />
#<br />
log4j.category.com.neusoft.mbip.dm.util=ERROR</p>
<p>#示例<br />
###################<br />
# Console Appender<br />
###################<br />
#log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender<br />
#log4j.appender.Threshold=DEBUG<br />
#log4j.appender.CONSOLE.Target=System.out<br />
#log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout<br />
#log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d &#8211; %c -%-4r [%t] %-5p %c %x &#8211; %m%n<br />
#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n</p>
<p>#####################<br />
# File Appender<br />
#####################<br />
#log4j.appender.FILE=org.apache.log4j.FileAppender<br />
#log4j.appender.FILE.File=file.log<br />
#log4j.appender.FILE.Append=false<br />
#log4j.appender.FILE.layout=org.apache.log4j.PatternLayout<br />
#log4j.appender.FILE.layout.ConversionPattern=[framework] %d &#8211; %c -%-4r [%t] %-5p %c %x &#8211; %m%n<br />
# Use this layout for LogFactor 5 analysis</p>
<p>########################<br />
# Rolling File????? RollingFileAppender??????????????????<br />
########################<br />
#log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender<br />
#log4j.appender.ROLLING_FILE.Threshold=ERROR<br />
# 文件位置<br />
#log4j.appender.ROLLING_FILE.File=rolling.log<br />
#log4j.appender.ROLLING_FILE.Append=true<br />
#文件大小<br />
#log4j.appender.ROLLING_FILE.MaxFileSize=10KB<br />
#指定采用输出布局和输出格式<br />
#log4j.appender.ROLLING_FILE.MaxBackupIndex=1<br />
#log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout<br />
#log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d &#8211; %c -%-4r [%t] %-5p %c %x &#8211; %m%n</p>
<p>####################<br />
# Socket Appender<br />
####################<br />
#log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender<br />
#log4j.appender.SOCKET.RemoteHost=localhost<br />
#log4j.appender.SOCKET.Port=5001<br />
#log4j.appender.SOCKET.LocationInfo=true<br />
# Set up for Log Facter 5<br />
#log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout<br />
#log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n</p>
<p>########################<br />
# SMTP Appender<br />
#######################<br />
#log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender<br />
#log4j.appender.MAIL.Threshold=FATAL<br />
#log4j.appender.MAIL.BufferSize=10<br />
#log4j.appender.MAIL.From=chenyl@hollycrm.com<br />
#log4j.appender.MAIL.SMTPHost=mail.hollycrm.com<br />
#log4j.appender.MAIL.Subject=Log4J Message<br />
#log4j.appender.MAIL.To=chenyl@hollycrm.com<br />
#log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout<br />
#log4j.appender.MAIL.layout.ConversionPattern=[framework] %d &#8211; %c -%-4r [%t] %-5p %c %x &#8211; %m%n</p>
<p>########################<br />
# JDBC Appender<br />
#######################<br />
#log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender<br />
#log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test<br />
#log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver<br />
#log4j.appender.DATABASE.user=root<br />
#log4j.appender.DATABASE.password=<br />
#log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES (&#8216;[framework] %d &#8211; %c -%-4r [%t] %-5p %c %x &#8211; %m%n&#8217;)<br />
#log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout<br />
#log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d &#8211; %c -%-4r [%t] %-5p %c %x &#8211; %m%n</p>
<p>########################<br />
# Log Factor 5 Appender<br />
########################<br />
#log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender<br />
#log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000</p>
<p>###################<br />
#???Appender<br />
###################<br />
#log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender<br />
#log4j.appender.im.host = mail.cybercorlin.net<br />
#log4j.appender.im.username = username<br />
#log4j.appender.im.password = password<br />
#log4j.appender.im.recipient = corlin@cybercorlin.net<br />
#log4j.appender.im.layout=org.apache.log4j.PatternLayout<br />
#log4j.appender.im.layout.ConversionPattern =[framework] %d &#8211; %c -%-4r [%t] %-5p %c %x &#8211; %m%n</p>
]]></content:encoded>
			<wfw:commentRss>http://www.laoliu.org/blog/archives/109/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CSV文件操作的两个类</title>
		<link>http://www.laoliu.org/blog/archives/108</link>
		<comments>http://www.laoliu.org/blog/archives/108#comments</comments>
		<pubDate>Wed, 13 Feb 2008 04:31:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.laoliu.org/blog/?p=108</guid>
		<description><![CDATA[贴这儿留着回去看一下 package jp.ac.wakhok.tomoharu.csv; import java.util.Vector; import java.util.Enumeration; /** * CSV形式の1行分のデータ内容を保持するクラス。 * CSV形式への書き出し、書き出しの際のエンクォートの指定、 * 項目の追加などが可能である。 * * @version 1.0.1 (1999.4.13) */ public class CSVLine { public static final String copyright = "Copyright 1997 TAMURA Kent" + "\n" + "Copyright 1999 ANDOH Tomoharu"; private Vector items; /** * 空のCSVLine のインスタンスを作成する。 */ public CSVLine() { items = new [...]]]></description>
			<content:encoded><![CDATA[<p>贴这儿留着回去看一下<br />
<code><br />
package jp.ac.wakhok.tomoharu.csv;</p>
<p>import java.util.Vector;<br />
import java.util.Enumeration;</p>
<p>/**<br />
* CSV形式の1行分のデータ内容を保持するクラス。<br />
* CSV形式への書き出し、書き出しの際のエンクォートの指定、<br />
* 項目の追加などが可能である。<br />
*<br />
* @version 1.0.1 (1999.4.13)<br />
*/</p>
<p>public class CSVLine {<br />
public static final String copyright =<br />
"Copyright 1997 TAMURA Kent" + "\n" +<br />
"Copyright 1999 ANDOH Tomoharu";<br />
private Vector items;</p>
<p>/**<br />
* 空のCSVLine のインスタンスを作成する。<br />
*/<br />
public CSVLine() {<br />
items = new Vector();<br />
}</p>
<p>/**<br />
* 引数で指定された文字列を、末尾に追加する。<br />
*<br />
* @param item 追加する文字列<br />
*/<br />
public void addItem(String item) {<br />
addItem(item, false);<br />
}</p>
<p>/**<br />
* 引数で指定された文字列を、末尾に追加する。<br />
* CSV形式のデータとして出力されるとき、その項目を強制的に<br />
* エンクォートするかどうかを引数によって指定する。<br />
*<br />
* @param item 追加する文字列<br />
* @param enquote trueだと、強制的にエンクォートされる。<br />
*/<br />
public void addItem(String item, boolean enquote) {<br />
items.addElement(new Element(item, enquote));<br />
}</p>
<p>/**<br />
* 引数で指定されたCSVTokenizerに含まれるすべての項目を、<br />
* 末尾に追加する。<br />
*<br />
* @param ct CSVTokenizerのインスタンス。ここに含まれている項目<br />
* は、末尾に追加される。<br />
* @see jp.ac.wakhok.tomoharu.csv.CSVTokenizer<br />
*/<br />
public void addItem(CSVTokenizer ct) {<br />
while (ct.hasMoreTokens()) {<br />
String item = ct.nextToken();<br />
items.addElement(new Element(item));<br />
}<br />
}</p>
<p>/**<br />
* 1行のCSV形式のデータを返す。<br />
*<br />
* @return １行のCSV形式のデータ<br />
*/<br />
public String getLine() {<br />
StringBuffer list = new StringBuffer();<br />
for (int n = 0; n < items.size(); n ++) {<br />
Element element = (Element)items.elementAt(n);<br />
String item = element.getItem();<br />
list.append(item);<br />
if (items.size() - 1 != n) {<br />
list.append(',');<br />
}<br />
}<br />
return new String(list);<br />
}</p>
<p>/**<br />
* 1行の項目数を返す。<br />
*<br />
* @return CSVLineに含んでいる項目の数<br />
*/<br />
public int size() {<br />
return items.size();<br />
}</p>
<p>/**<br />
* n番目の項目を String で返す。<br />
*<br />
* @param n 項目の番号 [0 ～ size()-1]<br />
* @return n番目の文字列。エンクォートはしない。<br />
*/<br />
public String getItem(int n) {<br />
Element element = (Element)items.elementAt(n);<br />
return element.getRawItem();<br />
}</p>
<p>/**<br />
* n番目の項目を削除する。<br />
*<br />
* @param n 項目の番号 [0 ～ size()-1]<br />
*/<br />
public void removeItem(int n) {<br />
items.removeElementAt(n);<br />
}</p>
<p>/**<br />
* CSVLineの項目のリストを返す。<br />
*<br />
* @return このCSVLineに含まれている文字列のリスト<br />
* @see java.util.Enumeration<br />
*/<br />
public Enumeration elements() {<br />
return new CSVLineEnumerator(items);<br />
}</p>
<p>/**<br />
* CSVLineに含まれるそれぞれの項目を保持するインナークラス。<br />
*/<br />
class Element {<br />
private String item;<br />
private boolean enquote;</p>
<p>Element(String item) {<br />
this(item, false);<br />
}</p>
<p>Element(String item, boolean enquote) {<br />
this.item = item;<br />
this.enquote = enquote;<br />
}</p>
<p>/**<br />
* 指定されていれば、エンクォートを行う。<br />
*/<br />
public String getItem() {<br />
return enquote(item, enquote);<br />
}</p>
<p>/**<br />
* エンクォートは一切しない。<br />
*/<br />
public String getRawItem() {<br />
return item;<br />
}<br />
}</p>
<p>/**<br />
* elements()メソッドで返される Enumerationクラス<br />
*/<br />
class CSVLineEnumerator implements Enumeration {<br />
private Vector items;<br />
private int n;</p>
<p>CSVLineEnumerator(Vector items) {<br />
this.items = items;<br />
n = 0;<br />
}</p>
<p>public Object nextElement() {<br />
n ++;<br />
Element element = (Element)items.elementAt(n-1);<br />
return element.getRawItem();<br />
}</p>
<p>public boolean hasMoreElements() {<br />
return n < items.size();<br />
}<br />
}</p>
<p>/**<br />
* 引数の文字列 item を CSV で出力できるように加工した文字列を<br />
* 返す。<br />
* item が " か , を含んでいるときには item 全体を " で囲み<br />
* （エンクォートし）、" を "" に置き換える。また" と , のどち<br />
* らも含んでいないときは、item をそのまま返す。<br />
*<br />
* @param item 処理したい文字列<br />
* @return item を処理した文字列<br />
*/<br />
public static String enquote(String item) {<br />
return enquote(item, false);<br />
}</p>
<p>/**<br />
* 引数の文字列 item を CSV で出力できるように加工した文字列を<br />
* 返す。<br />
* enquote が true のときは、強制的にエンクォートする。つまり、<br />
* item を " で囲った文字列を返す。<br />
* false のときは、エンクォートするかどうかは、item による。<br />
* item が " か , を含んでいるときには item 全体を " で囲み<br />
* （エンクォートし）、" を "" に置き換える。また" と , のどち<br />
* らも含んでいないときは、item をそのまま返す。<br />
* item が空、つまり長さがゼロの文字列だった場合、何もせずに<br />
* 空の文字列をそのまま返す。<br />
*<br />
* @param item 処理したい文字列<br />
* @param enquote trueなら強制的にエンクォートする<br />
* @return item を処理した文字列<br />
*/<br />
public static String enquote(String item, boolean enquote) {<br />
if (item.length() == 0) {<br />
return item;<br />
}<br />
if (item.indexOf('"') < 0 &amp;amp;amp;&amp;amp;amp; item.indexOf(',') < 0 &amp;amp;amp;&amp;amp;amp; enquote == false) {<br />
return item;<br />
}</p>
<p>// StringBufferのサイズは、最も異常な場合を想定した。<br />
// 文字列 """"" をエンクォートして出力するようなときのこと。</p>
<p>StringBuffer sb = new StringBuffer(item.length() * 2 + 2);<br />
sb.append('"');<br />
for (int ind = 0; ind < item.length(); ind ++) {<br />
char ch = item.charAt(ind);<br />
if ('"' == ch) {<br />
sb.append("\"\"");<br />
} else {<br />
sb.append(ch);<br />
}<br />
}<br />
sb.append('"');</p>
<p>return new String(sb);<br />
}<br />
}</code><br />
<code><br />
package jp.ac.wakhok.tomoharu.csv;</p>
<p>import java.util.Enumeration;<br />
import java.util.NoSuchElementException;</p>
<p>/**<br />
* 1行のCSV形式のデータを解析し、それぞれの項目に分解するクラス。<br />
* CSV形式に対応した java.util.StringTokenizer のようなもの。<br />
*<br />
* @version 1.0.1 (1999.4.6)<br />
* @author TAMURA Kent &lt;kent@muraoka.info.waseda.ac.jp&gt;&lt;/kent@muraoka.info.waseda.ac.jp&gt;<br />
* @author ANDOH Tomoharu &lt;tomoharu@wakhok.ac.jp&gt;&lt;/tomoharu@wakhok.ac.jp&gt;<br />
*/</p>
<p>public class CSVTokenizer implements Enumeration {<br />
public static final String copyright =<br />
&quot;Copyright 1997 TAMURA Kent&quot; + &quot;\n&quot; +<br />
&quot;Copyright 1999 ANDOH Tomoharu&quot;;<br />
private String source; // 対象となる文字列<br />
private int currentPosition; // 次の読み出し位置<br />
private int maxPosition;</p>
<p>/**<br />
* CSV 形式の line を解析する CSVTokenizer のインスタンスを<br />
* 作成する。<br />
*<br />
* @param line CSV形式の文字列 改行コードを含まない。<br />
*/<br />
public CSVTokenizer(String line) {<br />
source = line;<br />
currentPosition = 0;<br />
maxPosition = line.length();<br />
}</p>
<p>/**<br />
* 次のカンマがある位置を返す。<br />
* カンマが残っていない場合は nextComma() == maxPosition となる。<br />
* また最後の項目が空の場合も nextComma() == maxPosition となる。<br />
*<br />
* @param ind 検索を開始する位置<br />
* @return 次のカンマがある位置。カンマがない場合は、文字列の<br />
* 長さの値となる。<br />
*/<br />
private int nextComma(int ind) {<br />
boolean inquote = false;<br />
while (ind &lt; maxPosition) {<br />
char ch = source.charAt(ind);<br />
if (!inquote &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; ch == ',') {<br />
break;<br />
} else if ('&quot;' == ch) {<br />
inquote = !inquote; // &quot;&quot;の処理もこれでOK<br />
}<br />
ind ++;<br />
}<br />
return ind;<br />
}</p>
<p>/**<br />
* 含まれている項目の数を返す。<br />
*<br />
* @return 含まれている項目の数<br />
*/<br />
public int countTokens() {<br />
int i = 0;<br />
int ret = 1;<br />
while ((i = nextComma(i)) &lt; maxPosition) {<br />
i ++;<br />
ret ++;<br />
}<br />
return ret;<br />
}</p>
<p>/**<br />
* 次の項目の文字列を返す。<br />
*<br />
* @return 次の項目<br />
* @exception NoSuchElementException 項目が残っていないとき<br />
*/<br />
public String nextToken() {<br />
// &quot;&gt;=&quot; では末尾の項目を正しく処理できない。<br />
// 末尾の項目が空（カンマで1行が終わる）場合、例外が発生して<br />
// しまうので。<br />
if (currentPosition &gt; maxPosition)<br />
throw new NoSuchElementException(toString()+&quot;#nextToken&quot;);</p>
<p>int st = currentPosition;<br />
currentPosition = nextComma(currentPosition);</p>
<p>StringBuffer strb = new StringBuffer();<br />
while (st &lt; currentPosition) {<br />
char ch = source.charAt(st++);<br />
if (ch == '&quot;') {<br />
// &quot;が単独で現れたときは何もしない<br />
// 項目が&quot;&quot;だった時も何もしない added by sandaas, 2006/11/22<br />
if ((st &lt; currentPosition) &amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; (source.charAt(st) == '&quot;')<br />
&amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp; (strb.length() &gt; 0)) {<br />
strb.append(ch);<br />
st ++;<br />
}<br />
} else {<br />
strb.append(ch);<br />
}<br />
}<br />
currentPosition ++;<br />
return new String(strb);<br />
}</p>
<p>/**<br />
* &lt;code&gt;nextToken&lt;/code&gt;メソッドと同じで、<br />
* 次の項目の文字列を返す。<br />
* ただし返値は、String型ではなく、Object型である。<br />
* java.util.Enumerationを実装しているため、このメソッドが<br />
* ある。<br />
*<br />
* @return 次の項目<br />
* @exception NoSuchElementException 項目が残っていないとき<br />
* @see java.util.Enumeration<br />
* @see jp.ac.wakhok.tomoharu.csv.CSVTokenizer#nextElement()<br />
*/<br />
public Object nextElement() {<br />
return nextToken();<br />
}</p>
<p>/**<br />
* まだ項目が残っているかどうか調べる。<br />
*<br />
* @return まだ項目がのこっているならtrue<br />
*/<br />
public boolean hasMoreTokens() {<br />
// &quot;&lt;=&quot; でなく、&quot;&lt;&quot; だと末尾の項目を正しく処理できない。<br />
return (nextComma(currentPosition) &lt;= maxPosition);<br />
}</p>
<p>/**<br />
* &lt;code&gt;hasMoreTokens&lt;/code&gt;メソッドと同じで、<br />
* まだ項目が残っているかどうか調べる。<br />
* java.util.Enumerationを実装しているため、このメソッドが<br />
* ある。<br />
*<br />
* @return まだ項目がのこっているならtrue<br />
* @see java.util.Enumeration<br />
* @see jp.ac.wakhok.tomoharu.csv.CSVTokenizer#hasMoreTokens()<br />
*/<br />
public boolean hasMoreElements() {<br />
return hasMoreTokens();<br />
}</p>
<p>/**<br />
* インスタンスの文字列表現を返す。<br />
*<br />
* @return インスタンスの文字列表現。<br />
*/<br />
public String toString() {<br />
return &quot;CSVTokenizer(\&quot;&quot;+source+&quot;\&quot;)&quot;;<br />
}<br />
}</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.laoliu.org/blog/archives/108/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

