使用 java.net.* 获得网页:
import java.net.URL;import java.net.URLConnection ;
import java.io.InputStreamReader ;
import java.io.BufferedReader ;
import java.io.IOException ;
URL url = new URL( "your URL" ) ;
URLConnection uc = url.openConnection() ;
BufferedReader reader = new
BufferedReader( new InputStreamReader( uc.getInputStream() ) ) ;
String line ;
while( (line = reader.readLine()) != null ){
// read one line
}
注意可以用 HttpURLConnection 获得更加细致的控制。
使用
WebCAT 抓去网页,并抽取网页中文本信息:
import pt.tumba.parser.WebCAT ;
import pt.tumba.parser.HTMLParser ;
import pt.tumba.parser.Content ;
HTMLParser parser = new HTMLParser( "profiles" ) ;
URL url = new URL( "Your URL" ) ;
parser.initTokenizer( url ) ;
parser.processData() ;
Content content = parser.getContent() ;
System.out.println( content.getText() ) ;
通过 WebCAT 可以直接 parse 很多格式的东西,比如 PDF、RTF 甚至 SWF 的文本内容。这段代码里面初始化 HTMLParser 的参数是 language profiles 的目录。这个在该 project 的下载的压缩包里面有,利用这些 profile 能够匹配网页的语言类型。比较遗憾的是该库无法确定网页中的哪部分是主体,抽取出来的文字一般会含有其他的信息。比较有用的是里面还有对 link、图片等等的分析。
使用 org.apache.commons.cli.* 解析命令行参数:
import org.apache.commons.cli.* ;
Options options = new Options() ;
options.addOption( "h", false, "Help" ) ;
options.addOption( "o", true, "Output file" ) ;
CommandLineParser parser = new PosixParser() ;
CommandLine cmd = null ;
HelpFormatter formatter = new HelpFormatter() ;
try {
cmd = parser.parse( options, args) ;
} catch( ParseException e ) {
System.err.println( "Error in parsing." ) ;
formatter.printHelp( "TestCLI", options ) ;
System.exit( 1 ) ;
}
if( cmd.hasOption( "h" ) ) {
formatter.printHelp( "TestCLI", options ) ;
System.exit( 1 ) ;
}
if( cmd.hasOption( "o" ) ) {
// do something
System.out.println( "output file is " + cmd.getOptionValue( "o" ) ) ;
}
这里有一个非常好的教程。值得注意的是,org.apache.common 是一个非常大的 Java 程序集合,其中有不少好用的东西,比如编码 base64、压缩文件、xml 到 Java 对象的转换等等,值得有空研究一下的。
使用 java.util.Properties 创建简单的配置文件(key=val 形式的文件),并读取其中的内容。
import java.util.Properties ;
import java.util.Set ;
import java.io.FileInputStream ;
import java.io.IOException ;
Properties properties = new Properties() ;
FileInputStream in = null ;
try {
in = new FileInputStream( "test.conf" ) ;
properties.load( in ) ;
in.close() ;
} catch( IOException e ) {
System.err.println( "Can't open config file" ) ;
System.exit( 1 ) ;
}
Set<String> keys = properties.stringPropertyNames() ;
for( String key : keys ) {
System.out.println( key + ": " + properties.getProperty( key ) ) ;
}
另外可以考虑使用 org.apache.commons.configuration.* 做类似的事情。
可能我还是更喜欢 boost::program_options 解决的方案,呵呵。