如何使一个java程序,一执行,就打开本地某目录下的html文件比如abc.html, 就像双击打开那样!

如何使一个java程序,一执行,就打开本地某目录下的html文件比如abc.html, 就像双击打开那样!,第1张

如何使一个java程序,一执行,就打开本地某目录下的html文件?比如abchtml, 就像双击打开那样! 15

public static void main(String args[]) throws Exception

{

File file = new File("abchtml");

Runtime ce=RuntimegetRuntime();

Systemoutprintln(filegetAbsolutePath());

ceexec(filegetAbsolutePath());

}

像这样,想打开同目录下的abchtml,怎么不行呢?

恩,你的命令不正确,怎么会打开呢?

试试我给你的代码吧

import javaioFile;

public class TestRuntime {

/

@param args

/

public static void main(String args[]) throws Exception

{

File file = new File("abchtml");

Runtime ce=RuntimegetRuntime();

Systemoutprintln(filegetAbsolutePath());

ceexec("cmd   /c   start  "+filegetAbsolutePath());

}

}

只要在你的同目录下有abchtml,就可以打开了

为了支持全文检索,有必要将HTML格式的文章转化为纯文本格式,因此我设计了一个基本的WebFormatter类,提供一个简单的public static String html2text(String html),将HTML格式转化为Text:

/

File: WebFormatterjava

Created on 2005-6-24

Author: Liao Xuefeng, asklxf@163com

Copyright (C) 2005, Liao Xuefeng

/

package commbokerblogwebutil;

import javautil;

import javatextSimpleDateFormat;

/

Do some format on web display

@author Xuefeng

/

public class WebFormatter {

public static String html2text(String html) {

StringBuffer sb = new StringBuffer(htmllength());

char[] data = htmltoCharArray();

int start = 0;

boolean previousIsPre = false;

Token token = null;

for(;;) {

token = parse(data, start, previousIsPre);

if(token==null)

break;

previousIsPre = tokenisPreTag();

sb = sbappend(tokengetText());

start += tokengetLength();

}

return sbtoString();

}

private static Token parse(char[] data, int start, boolean previousIsPre) {

if(start>=datalength)

return null;

// try to read next char:

char c = data[start];

if(c=='<') {

// this is a tag or comment or script:

int end_index = indexOf(data, start+1, '>');

if(end_index==(-1)) {

// the left is all text!

return new Token(TokenTOKEN_TEXT, data, start, datalength, previousIsPre);

}

String s = new String(data, start, end_index-start+1);

// now we got s="<>":

if(sstartsWith("<!--")) { // this is a comment!

int end_comment_index = indexOf(data, start+1, "-->");

if(end_comment_index==(-1)) {

// illegal end, but treat as comment:

return new Token(TokenTOKEN_COMMENT, data, start, datalength, previousIsPre);

}

else

return new Token(TokenTOKEN_COMMENT, data, start, end_comment_index+3, previousIsPre);

}

String s_lowerCase = stoLowerCase();

if(s_lowerCasestartsWith("<script")) { // this is a script:

int end_script_index = indexOf(data, start+1, "</script>");

if(end_script_index==(-1))

// illegal end, but treat as script:

return new Token(TokenTOKEN_SCRIPT, data, start, datalength, previousIsPre);

else

return new Token(TokenTOKEN_SCRIPT, data, start, end_script_index+9, previousIsPre);

}

else { // this is a tag:

return new Token(TokenTOKEN_TAG, data, start, start+slength(), previousIsPre);

}

}

// this is a text:

int next_tag_index = indexOf(data, start+1, '<');

if(next_tag_index==(-1))

return new Token(TokenTOKEN_TEXT, data, start, datalength, previousIsPre);

return new Token(TokenTOKEN_TEXT, data, start, next_tag_index, previousIsPre);

}

private static int indexOf(char[] data, int start, String s) {

char[] ss = stoCharArray();

// TODO: performance can improve!

for(int i=start; i<(datalength-sslength); i++) {

// compare from data[i] with ss[0]:

boolean match = true;

for(int j=0; j<sslength; j++) {

if(data[i+j]!=ss[j]) {

match = false;

break;

}

}

if(match)

return i;

}

return (-1);

}

private static int indexOf(char[] data, int start, char c) {

for(int i=start; i<datalength; i++) {

if(data[i]==c)

return i;

}

return (-1);

}

}

class Token {

public static final int TOKEN_TEXT = 0; // html text

public static final int TOKEN_COMMENT = 1; // comment like <!-- comments -->

public static final int TOKEN_TAG = 2; // tag like <pre>, <font>, etc

public static final int TOKEN_SCRIPT = 3;

private static final char[] TAG_BR = "<br"toCharArray();

private static final char[] TAG_P = "<p"toCharArray();

private static final char[] TAG_LI = "<li"toCharArray();

private static final char[] TAG_PRE = "<pre"toCharArray();

private static final char[] TAG_HR = "<hr"toCharArray();

private static final char[] END_TAG_TD = "</td>"toCharArray();

private static final char[] END_TAG_TR = "</tr>"toCharArray();

private static final char[] END_TAG_LI = "</li>"toCharArray();

private static final Map SPECIAL_CHARS = new HashMap();

private int type;

private String html; // original html

private String text = null; // text!

private int length = 0; // html length

private boolean isPre = false; // isPre tag

static {

SPECIAL_CHARSput(""", "\"");

SPECIAL_CHARSput("<", "<");

SPECIAL_CHARSput(">", ">");

SPECIAL_CHARSput("&", "&");

SPECIAL_CHARSput("®", "(r)");

SPECIAL_CHARSput("©", "(c)");

SPECIAL_CHARSput(" ", " ");

SPECIAL_CHARSput("£", "");

}

public Token(int type, char[] data, int start, int end, boolean previousIsPre) {

thistype = type;

thislength = end - start;

thishtml = new String(data, start, length);

Systemoutprintln("[Token] html=" + html + "");

parseText(previousIsPre);

Systemoutprintln("[Token] text=" + text + "");

}

public int getLength() {

return length;

}

public boolean isPreTag() {

return isPre;

}

private void parseText(boolean previousIsPre) {

if(type==TOKEN_TAG) {

char[] cs = htmltoCharArray();

if(compareTag(TAG_BR, cs) || compareTag(TAG_P, cs))

text = "\n";

else if(compareTag(TAG_LI, cs))

text = "\n ";

else if(compareTag(TAG_PRE, cs))

isPre = true;

else if(compareTag(TAG_HR, cs))

text = "\n--------\n";

else if(compareString(END_TAG_TD, cs))

text = "\t";

else if(compareString(END_TAG_TR, cs) || compareString(END_TAG_LI, cs))

text = "\n";

}

// text token:

else if(type==TOKEN_TEXT) {

text = toText(html, previousIsPre);

}

}

public String getText() {

return text==null "" : text;

}

private String toText(String html, final boolean isPre) {

char[] cs = htmltoCharArray();

StringBuffer buffer = new StringBuffer(cslength);

int start = 0;

boolean continueSpace = false;

char current, next;

for(;;) {

if(start>=cslength)

break;

current = cs[start]; // read current char

if(start+1<cslength) // and next char

next = cs[start+1];

else

next = '\0';

if(current==' ') {

if(isPre || !continueSpace)

buffer = bufferappend(' ');

continueSpace = true;

// continue loop:

start++;

continue;

}

// not ' ', so:

if(current=='\r' && next=='\n') {

if(isPre)

buffer = bufferappend('\n');

// continue loop:

start+=2;

continue;

}

if(current=='\n' || current=='\r') {

if(isPre)

buffer = bufferappend('\n');

// continue loop:

start++;

continue;

}

// cannot continue space:

continueSpace = false;

if(current=='&') {

// maybe special char:

int length = readUtil(cs, start, ';', 10);

if(length==(-1)) { // just '&':

buffer = bufferappend('&');

// continue loop:

start++;

continue;

}

else { // check if special character:

String spec = new String(cs, start, length);

String specChar = (String)SPECIAL_CHARSget(spec);

if(specChar!=null) { // special chars!

buffer = bufferappend(specChar);

// continue loop:

start+=length;

continue;

}

else { // check if like 'Ӓ':

if(next=='#') { // maybe a char

String num = new String(cs, start+2, length-3);

try {

int code = IntegerparseInt(num);

if(code>0 && code<65536) { // this is a special char:

buffer = bufferappend((char)code);

// continue loop:

start++;

continue;

}

}

catch(Exception e) {}

// just normal char:

buffer = bufferappend("");

// continue loop:

start+=2;

continue;

}

else { // just '&':

buffer = bufferappend('&');

// continue loop:

start++;

continue;

}

}

}

}

else { // just a normal char!

buffer = bufferappend(current);

// continue loop:

start++;

continue;

}

}

return buffertoString();

}

// read from cs[start] util meet the specified char 'util',

// or null if not found:

private int readUtil(final char[] cs, final int start, final char util, final int maxLength) {

int end = start+maxLength;

if(end>cslength)

end = cslength;

for(int i=start; i<start+maxLength; i++) {

if(cs[i]==util) {

return i-start+1;

}

}

return (-1);

}

// compare standard tag "<input" with tag "<INPUT value=aa>"

private boolean compareTag(final char[] ori_tag, char[] tag) {

if(ori_taglength>=taglength)

return false;

for(int i=0; i<ori_taglength; i++) {

if(CharactertoLowerCase(tag[i])!=ori_tag[i])

return false;

}

// the following char should not be a-z:

if(taglength>ori_taglength) {

char c = CharactertoLowerCase(tag[ori_taglength]);

if(c<'a' || c>'z')

return true;

return false;

}

return true;

}

private boolean compareString(final char[] ori, char[] comp) {

if(orilength>complength)

return false;

for(int i=0; i<orilength; i++) {

if(CharactertoLowerCase(comp[i])!=ori[i])

return false;

}

return true;

}

public String toString() {

return html;

}

}

注意,请先将html中的<body></body>部分提取出来,再交给WebFormatter处理,因为html->text转换实质是删除所有标签(某些标签如<br>被转化为'\n')、Script和注释,对于JavaScript生成的动态内容(例如documentwrite)无能为力。

你的意思是用java代码模拟访问一个html网页? 可以用URLConnection

URL url = new URL("你的html文件的>

public class $ {

    public static void main(String[] args) {

        String path = SystemgetProperty("userdir") + "/src/html/emailhtml";

        Systemoutprintln(path);

    }

}

动态获取路径

以上就是关于如何使一个java程序,一执行,就打开本地某目录下的html文件比如abc.html, 就像双击打开那样!全部的内容,包括:如何使一个java程序,一执行,就打开本地某目录下的html文件比如abc.html, 就像双击打开那样!、java 读取本地html保存到 my.txt、java打开html文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10145406.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存