Welcome![Sign In][Sign Up]
Location:
Search - IMG R

Search list

[Internet-Network用Java编写HTML文件分析程序

Description:

Java编写HTML文件分析程序

 一、概述

    

    Web服务器的核心是对Html文件中的各标记(Tag)作出正确的分析,一种编程语言的解释程序也是对源文件中的保留字进行分析再做解释的。实际应用中,我们也经常会碰到需要对某一特定类型文件进行要害字分析的情况,比如,需要将某个HTML文件下载并同时下载与之相关的.gif.class等文件,此时就要求对HTML文件中的标记进行分离,找出所需的文件名及目录。在Java出现以前,类似工作需要对文件中的每个字符进行分析,从中找出所需部分,不仅编程量大,且易出错。笔者在近期的项目中利用Java的输入流类StreamTokenizer进行HTML文件的分析,效果较好。在此,我们要实现从已知的Web页面下载HTML文件,对其进行分析后,下载该页面中包含的HTML文件(假如在Frame中)、图像文件和ClassJava Applet)文件。

    

    二、StreamTokenizer

    

    StreamTokenizer即令牌化输入流的作用是将一个输入流中变成令牌流。令牌流中的令牌实体有三类:单词(即多字符令牌)、单字符令牌和空白(包括JavaC/C++中的说明语句)。

    

    StreamTokenizer类的构造器为: StreamTokenizer(InputStream in)

    

    该类有一些公有实例变量:ttypesvalnval ,分别表示令牌类型、当前字符串值和当前数字值。当我们需要取得令牌(即HTML中的标记)之间的字符时,应访问变量sval。而读向下一个令牌的方法是调用nextToken()。方法nextToken()的返回值是int型,共有四种可能的返回:

    

    StreamTokenizer.TT_NUMBER: 表示读到的令牌是数字,数字的值是double型,可以从实例变量nval中读取。

    

    StreamTokenizer.TT_Word: 表示读到的令牌是非数字的单词(其他字符也在其中),单词可以从实例变量sval中读取。

    

    StreamTokenizer.TT_EOL: 表示读到的令牌是行结束符。

    

    假如已读到流的尽头,则nextToken()返回TT_EOF

    

    开始调用nextToken()之前,要设置输入流的语法表,以便使分析器辨识不同的字符。WhitespaceChars(int low, int hi)方法定义没有意义的字符的范围。WordChars(int low, int hi)方法定义构造单词的字符范围。

    

    三、程序实现

    

    1HtmlTokenizer类的实现

    

    对某个令牌流进行分析之前,首先应对该令牌流的语法表进行设置,在本例中,即是让程序分出哪个单词是HTML的标记。下面给出针对我们需要的HTML标记的令牌流类定义,它是StreamTokenizer的子类:

    

    

    import java.io.*;

    import java.lang.String;

    class HtmlTokenizer extends

    StreamTokenizer {

    //定义各标记,这里的标记仅是本例中必须的,

    可根据需要自行扩充

     static int HTML_TEXT=-1;

     static int HTML_UNKNOWN=-2;

     static int HTML_EOF=-3;

     static int HTML_IMAGE=-4;

     static int HTML_FRAME=-5;

     static int HTML_BACKGROUND=-6;

     static int HTML_APPLET=-7;

    

    boolean outsideTag=true; //判定是否在标记之中

    

     //构造器,定义该令牌流的语法表。

     public HtmlTokenizer(BufferedReader r) {

    super(r);

    this.resetSyntax(); //重置语法表

    this.wordChars(0,255); //令牌范围为全部字符

    this.ordinaryChar('< '); //HTML标记两边的分割符

    this.ordinaryChar('>');

     } //end of constrUCtor

    

     public int nextHtml(){

    int token; //令牌

    try{

    switch(token=this.nextToken()){

    case StreamTokenizer.TT_EOF:

    //假如已读到流的尽头,则返回TT_EOF

    return HTML_EOF;

    case '< ': //进入标记字段

    outsideTag=false;

    return nextHtml();

    case '>': //出标记字段

    outsideTag=true;

    return nextHtml();

    case StreamTokenizer.TT_WORD:

    //若当前令牌为单词,判定是哪个标记

    if (allWhite(sval))

     return nextHtml(); //过滤其中空格

    else if(sval.toUpperCase().indexOf("FRAME")

    !=-1 && !outsideTag) //标记FRAME

     return HTML_FRAME;

    else if(sval.toUpperCase().indexOf("IMG")

    !=-1 && !outsideTag) //标记IMG

     return HTML_IMAGE;

    else if(sval.toUpperCase().indexOf("BACKGROUND")

    !=-1 && !outsideTag) //标记BACKGROUND

     return HTML_BACKGROUND;

    else if(sval.toUpperCase().indexOf("APPLET")

    !=-1 && !outsideTag) //标记APPLET

     return HTML_APPLET;

    default:

    System.out.println ("Unknown tag: "+token);

    return HTML_UNKNOWN;

     } //end of case

    }catch(IOException e){

    System.out.println("Error:"+e.getMessage());}

    return HTML_UNKNOWN;

     } //end of nextHtml

    

    protected boolean allWhite(String s){//过滤所有空格

    //实现略

     }// end of allWhite

    

    } //end of class

    

    以上方法在近期项目中测试通过,操作系统为Windows NT4,编程工具使用Inprise Jbuilder3


Platform: | Size: 1066 | Author: tiberxu | Hits:

[Compress-Decompress algrithmsimage_compress

Description: 本程序利用奇异值分解对3通道彩色图像进行压缩分解,具体步骤如下: 压缩过程: 1. 选取子图像大小K值,把图像分解成M×M个子图像,IMG(s),s=1,2,…, M2,其中M=N/K,原始图像IMG大小为N×N。 2. 计算这M2个子图像的平均值average,对每幅子图像减去均值图像得到新图像。 3. 计算相关矩阵R,其元素定义为 。 4. 计算R的特征值与特征向量,计算每幅子图像与最大特征向量的内积,便得到编码,即压缩后的图像。
Platform: | Size: 335193 | Author: wangweiming | Hits:

[Windows DevelopXRayImg

Description: 小波滤波器-代码.r.. ·关于常用图像处理的v.. ·采用多种小波基的离散.. ·利用小波变换进行边缘.. ·一个关于图像边缘检测.. -wavelet filter-code. R.. On the common image processing v.. Using a variety of small Porgy .. use of discrete wavelet transform on the brink .. 1 .. Edge Detection
Platform: | Size: 1609728 | Author: 杨东 | Hits:

[Compress-Decompress algrithmsimage_compress

Description: 本程序利用奇异值分解对3通道彩色图像进行压缩分解,具体步骤如下: 压缩过程: 1. 选取子图像大小K值,把图像分解成M×M个子图像,IMG(s),s=1,2,…, M2,其中M=N/K,原始图像IMG大小为N×N。 2. 计算这M2个子图像的平均值average,对每幅子图像减去均值图像得到新图像。 3. 计算相关矩阵R,其元素定义为 。 4. 计算R的特征值与特征向量,计算每幅子图像与最大特征向量的内积,便得到编码,即压缩后的图像。 -This procedure using singular value decomposition of 3-channel color image compression decomposition, concrete steps are as follows: compression process: 1. Select the sub-image size K value, the image is decomposed into M × M sub-image, IMG (s), s = 1, 2, ..., M2, in which M = N/K, the original image IMG size N × N. 2. M2 calculate the average of sub-image average, for each sub-image minus the new images mean images. 3. Calculation of correlation matrix R, defined as its elements. 4. Calculation of the characteristics of R value and eigenvector calculated each sub-image with the largest eigenvector of the inner product, they will have to code, that is, the compressed images.
Platform: | Size: 334848 | Author: wangweiming | Hits:

[Picture Viewergds31f

Description: 观看,替换和转换 GIF/JPG/PCX/TIF/IFF/LBM/DL/ HAM/BMP/RLE/TGA/MAC/WPG/CUT/ANSI/TXT/IMG/ PBM/CUT/GL/FLI/MPG显示极小的图象-Views, replacement and conversion of GIF/JPG/PCX/TIF/IFF/LBM/DL/HAM/BMP/RLE/TGA/MAC/WPG/CUT/ANSI/TXT/IMG/PBM/CUT/GL/FLI/MPG showed very small image
Platform: | Size: 379904 | Author: 风凉 | Hits:

[GDI-Bitmap09_ImageView_zhou

Description: 用vc6.0编写的图像显示程序,可显示所有windows图片以及tif、img等格式的文件,并可选择灰度显示或彩色(R、G、B)。程序使用了gdal库。-Prepared using vc6.0 image display program can display all the windows picture and tif, img, etc. file formats, and can choose grayscale or color (R, G, B). Program uses the gdal library.
Platform: | Size: 15345664 | Author: zhouxuecheng | Hits:

[2D Graphicrgb2ycbcr

Description: 颜色空间转换:RGB空间-->ycbcr空间。速度比ColorSpace调用快多了。 调用格式[y, cb, cr] = rgb2ycbcr(img) 输入img: rgb彩色图;y: 亮度,cb:蓝色,cr:红色 调用参考runTest.m-Color space conversion, RGB to ycbcr call format: [y, cb, cr] = rgb2ycbcr(img) input img: rgb image output r: intensity, cb: blue, cr: red Example see runTest.m
Platform: | Size: 377856 | Author: hujunyi | Hits:

[Othermtd-utils-1.0.0.tar

Description: ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-1.0.0.tar.gz,下载mtd-utils-1.0.0.tar.gz工具包。 # tar zxf mtd-utitls-1.0.0 # make (编译完成后,本地目录生成jffs工具mkfs.jffs与mkfs.jffs2) #./mkfs.jffs2 -r /root/rootfs -o rootfs-jffs2.img -e 0x4000 --pad=0x800000 -n (本地目录生成jaffs2镜像文件rootfs-jffs2.img,-e表示擦除块的大小,--pad表示要创建的文件系统大小) Jaffs2文件系统烧写: 1、配置开发板烧写环境,进入pmon命令行 2、烧写系统: # devcp tftp://192.168.*.***/rootfs-jffs2.img /dev/mtd1(# devcp tftp://192.168.*.***/rootfs-jffs2.img /dev/mtd1)
Platform: | Size: 279552 | Author: susum | Hits:

CodeBus www.codebus.net