??xml version="1.0" encoding="utf-8" standalone="yes"?>
import
org.htmlparser.NodeFilter;
import
org.htmlparser.Parser;
import
org.htmlparser.filters.TagNameFilter;
import
org.htmlparser.tags.TableTag;
import
org.htmlparser.util.NodeList;
/**
* <br>
* 标题: <br>
* 功能概要: <br>
* 版权: cityyouth.cn (c) 2005 <br>
* 公司:上v城市青年|?lt;br>
* 创徏旉:2005-12-21 <br>
* 修改旉: <br>
* 修改原因Q?br /> *
*
@author
张伟
*
@version
1.0
*/
public
class
TestYahoo {
public
static
void
testHtml() {
try
{
String sCurrentLine;
String sTotalString;
sCurrentLine
=
""
;
sTotalString
=
""
;
java.io.InputStream l_urlStream;
java.net.URL l_url
=
new
java.net.URL(
"
http://sports.sina.com.cn/iframe/nba/live/
"
);
java.net.HttpURLConnection l_connection
=
(java.net.HttpURLConnection) l_url
.openConnection();
l_connection.connect();
l_urlStream
=
l_connection.getInputStream();
java.io.BufferedReader l_reader
=
new
java.io.BufferedReader(
new
java.io.InputStreamReader(l_urlStream));
while
((sCurrentLine
=
l_reader.readLine())
!=
null
) {
sTotalString
+=
sCurrentLine;
}
System.out.println(sTotalString);
System.out.println(
"
====================
"
);
String testText
=
extractText(sTotalString);
System.out.println(testText);
}
catch
(Exception e) {
e.printStackTrace();
}
}
/**
* 抽取U文本信?br /> *
*
@param
inputHtml
*
@return
*/
public
static
String extractText(String inputHtml)
throws
Exception {
StringBuffer text
=
new
StringBuffer();
Parser parser
=
Parser.createParser(
new
String(inputHtml.getBytes(),
"
8859_1
"
),
"
8859-1
"
);
//
遍历所有的节点
NodeList nodes
=
parser.extractAllNodesThatMatch(
new
NodeFilter() {
public
boolean
accept(Node node) {
return
true
;
}
});
Node node
=
nodes.elementAt(
0
);
text.append(
new
String(node.toPlainTextString().getBytes(
"
8859_1
"
)));
return
text.toString();
}
/**
* d文g的方式来分析内容. filePath也可以是一个Url.
*
*
@param
resource
* 文g/Url
*/
public
static
void
test5(String resource)
throws
Exception {
Parser myParser
=
new
Parser(resource);
//
讄~码
myParser.setEncoding(
"
GBK
"
);
String filterStr
=
"
table
"
;
NodeFilter filter
=
new
TagNameFilter(filterStr);
NodeList nodeList
=
myParser.extractAllNodesThatMatch(filter);
TableTag tabletag
=
(TableTag) nodeList.elementAt(
11
);
System.out.println(tabletag.toHtml());
System.out.println(
"
==============
"
);
}
/*
* public static void main(String[] args) { TestYahoo testYahoo = new
* TestYahoo(); testYahoo.testHtml(); }
*/
public
static
void
main(String[] args)
throws
Exception {
test5(
"
http://sports.yahoo.com/nba/scoreboard
"
);
}
}
]]>
(?a >http://blogger.org.cn/blog/more.asp?name=dashee&id=6431)
Log4j׃个重要的lg构成Q日志信息的优先U,日志信息的输出目的地Q日志信息的输出格式。日志信息的优先U从高到低有ERROR、WARN?
INFO、DEBUGQ分别用来指定这条日志信息的重要E度Q日志信息的输出目的地指定了日志打印到控制台还是文件中Q而输出格式则控制了日志信息的昄内容?br />
一、定义配|文?br />
其实您也可以完全不用配|文Ӟ而是在代码中配置Log4j环境。但是,使用配置文g您的应用E序更加灉|。Log4j支持两种配置文g格式Q一U是XML格式的文Ӟ一U是JavaҎ文Ӟ?|。下面我们介l用JavaҎ文件做为配|文件的ҎQ?br />
1.配置根LoggerQ其语法为:
log4j.rootLogger
= [ level ] , appenderName, appenderName, ?br />
其中Qlevel
是日志记录的优先U,分ؓOFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的别。Log4j只用四个别,优先U从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的U别Q您可以控制到应用程序中相应U别的日志信息的开兟뀂比如在q里定义了INFOU别Q则应用E序中所有DEBUGU别的日志信息将不被打印出来?
appenderName是指B日志信息输出到哪个地斏V您可以同时指定多个输出目的地?br />
2.配置日志信息输出目的地AppenderQ其语法为:
log4j.appender.appenderName
=
fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1
= value1
?br /> log4j.appender.appenderName.option =
valueN
其中QLog4j提供的appender有以下几U:
org.apache.log4j.ConsoleAppenderQ控制台Q,
org.apache.log4j.FileAppenderQ文ӞQ?br /> org.apache.log4j.DailyRollingFileAppenderQ每天生一个日志文ӞQ?br /> org.apache.log4j.RollingFileAppenderQ文件大到达指定尺寸的时候生一个新的文ӞQ?br /> org.apache.log4j.WriterAppenderQ将日志信息以流格式发送到L指定的地方)
3.配置日志信息的格式(布局Q,其语法ؓQ?br />
log4j.appender.appenderName.layout
=
fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1
= value1
?br /> log4j.appender.appenderName.layout.option =
valueN
其中QLog4j提供的layout有以e几种Q?br /> org.apache.log4j.HTMLLayoutQ以HTML表格形式布局Q,
org.apache.log4j.PatternLayoutQ可以灵zd指定布局模式Q,
org.apache.log4j.SimpleLayoutQ包含日志信息的U别和信息字W串Q,
org.apache.log4j.TTCCLayoutQ包含日志生的旉、线E、类别等{信息)
Log4J采用cMC语言中的printf函数的打印格式格式化日志信息Q打印参数如下:
%m 输出代码中指定的消息
%p 输出优先U,即DEBUGQINFOQWARNQERRORQFATAL
%r
输出自应用启动到输出该log信息耗费的毫U数
%c 输出所属的cȝQ通常是所在类的全?br /> %t 输出产生该日志事件的U程?br /> %n
输出一个回车换行符QWindowsq_为“\r\n”,Unixq_为“\n?br /> %d
输出日志旉点的日期或时_默认格式为ISO8601Q也可以在其后指定格式,比如Q?d{yyy MMM dd
HH:mm:ss,SSS}Q输出类|2002q?0?8?22Q?0Q?8Q?21
%l
输出日志事g的发生位|,包括cȝ名、发生的U程Q以及在代码中的行数。D例:Testlog4.main(TestLog4.java:10)
二、在代码中用Log4j
1.得到记录?br />
使用Log4jQ第一步就是获取日志记录器Q这个记录器负责控制日志信息。其语法为:
public
static Logger getLogger( String
name)
通过指定的名字获得记录器Q如果必要的话,则ؓq个名字创徏一个新的记录器。Name一般取本类的名字,比如Q?br />
static
Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName ()
)
2.d配置文g
当获得了日志记录器之后,W二步将配置Log4j环境Q其语法为:
BasicConfigurator.configure
()Q?自动快速地使用~省Log4j环境?br /> PropertyConfigurator.configure ( String
configFilename) Q读取用Java的特性文件编写的配置文g?br /> DOMConfigurator.configure ( String
filename )
Q读取XML形式的配|文件?br />
3.插入记录信息Q格式化日志信息Q?br />
当上两个必要步骤执行完毕Q您可以轻村֜使用不同优先U别的日志记录语句插入到您想记录日志的Q何地方,其语法如下:
Logger.debug
( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn (
Object message ) ;
Logger.error ( Object message ) ;
一Q?span lang="EN-US">POI?span lang="EN-US">
Jakarta POI
?span lang="EN-US">apache的子目Q目标是处理ole2对象。它提供了一l操U?span lang="EN-US">Windows文档?span lang="EN-US">Java API
目前比较成熟的是HSSF接口Q处?span lang="EN-US">MS ExcelQ?span lang="EN-US">97-2002Q对象。它不象我们仅仅是用csv生成的没有格式的可以?span lang="EN-US">Excel转换的东西,而是真正?span lang="EN-US">Excel对象Q你可以控制一些属性如sheet,cell{等?span lang="EN-US">
二.HSSF概况
HSSF
?span lang="EN-US">Horrible SpreadSheet Format的羃写,也即“讨厌的电子表格格式”?也许HSSF的名字有ҎE,本质而言它是一个非怸肃、正规的API。通过HSSFQ你可以用纯Java代码来读取、写入、修?span lang="EN-US">Excel文g?span lang="EN-US">
HSSF
取操作提供了两类APIQ?span lang="EN-US">usermodel?span lang="EN-US">eventusermodelQ即“用h型”和“事?span lang="EN-US">-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多?/span>
三.开始编?span lang="EN-US">
1
Q?/span>
准备工作
要求:JDK 1.4+POI开发包
可以?/span>
http://www.apache.org/dyn/closer.cgi/jakarta/poi/
最新的POI工具?span lang="EN-US">
2
Q?/span>
EXCEL
l构
HSSFWorkbook excell
文档对象介绍
HSSFSheet excell的表?span lang="EN-US">
HSSFRow excell的行
HSSFCell excell的格子单?span lang="EN-US">
HSSFFont excell字体
HSSFName 名称
HSSFDataFormat 日期格式
?span lang="EN-US">poi1.7中才有以?span lang="EN-US">2:
HSSFHeader sheet?span lang="EN-US">
HSSFFooter sheet?span lang="EN-US">
和这个样?span lang="EN-US">
HSSFCellStyle cell样式
辅助操作包括
HSSFDateUtil 日期
HSSFPrintSetup 打印
HSSFErrorConstants 错误信息?/span>
3
Q具体用法实?/span>
Q采?/span>
usermodel
Q?/span>
如何?span lang="EN-US">Excel
dExcel文gӞ首先生成一?span lang="EN-US">POIFSFileSystem对象Q由POIFSFileSystem对象构造一?span lang="EN-US">HSSFWorkbookQ该HSSFWorkbook对象׃表了Excel文档。下面代码读取上面生成的Excel文g写入的消息字Ԍ
POIFSFileSystemfs=newPOIFSFileSystem(new FileInputStream("d:\test.xls"));
HSSFWorkbook
wb = new HSSFWorkbook(fs);
} catch (IOException e) {
e.printStackTrace();
}
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.getRow(0);
HSSFCell cell = row.getCell((short) 0);
String msg = cell.getStringCellValue();
如何?span lang="EN-US">excelQ?span lang="EN-US">
?span lang="EN-US">excel的第一个表单第一行的W一个单元格的值写成?span lang="EN-US">a test”?span lang="EN-US">
POIFSFileSystem fs =new POIFSFileSystem(new FileInputStream("workbook.xls"));
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
HSSFRow row = sheet.getRow(0);
HSSFCell cell = row.getCell((short)0);
cell.setCellValue("a test");
// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();
4
Q?/span>
可参考文?/span>
POI
主页Q?span lang="EN-US">http://jakarta.apache.org/poi/Q?span lang="EN-US">
初学者如何快速上手?span lang="EN-US">POI HSSF
http://jakarta.apache.org/poi/hssf/quick-guide.html
?span lang="EN-US">
代码例子
http://blog.java-cn.com/user1/6749/archives/2005/18347.html
里面有很多例子代码,可以很方便上手?span lang="EN-US">
四.使用心得
POI HSSF
?span lang="EN-US">usermodel包把Excel文g映射成我们熟悉的l构Q诸?span lang="EN-US">Workbook?span lang="EN-US">Sheet?span lang="EN-US">Row?span lang="EN-US">Cell{,它把整个l构以一l对象的形式保存在内存之中,便于理解Q操作方便,基本上能够满x们的要求Q所以说q个一个不错的选择?/span>